我对机器学习/深度学习是新手,但我在寻找一种从文本中提取元数据的方法,我认为机器学习可能是好的解决方案。
目标
输入:包含字段描述符和值/值的句子,例如:
“非流动资产 5 675 5 512 4 789 4 586”
“现金及现金等价物 909 861 912 630”
“存货、贸易和其他应收款及其他流动资产 3 756 2 998 2 864 2 834”
“总资产 10 340 9 372 8 565 8 051”
“权益 5 649 4 560 2 365 1 969”
“非流动负债 2 438 2 403 3 270 2 407”
“流动负债 2 253 2 409 2 931 3 675”
我做了一些研究,知道这些词需要嵌入(使用Word2Vec或类似的东西)。但是,数字如何处理呢?
输出:元组 {字段: 值}
{non_current_assets: 5675}
{cash_and_cash_equivalents: 909}
{total_assets: 10340}
{equity: 5649}
{non_current_liabilities: 2438}
{current_liabilities: 3756}
{inventories: 3756}
问题
- 是否可以使用机器学习解决?如果可以:
- 我应该如何格式化输入数据?
- 哪种算法最适合此任务?
回答:
你的问题不太清楚。
如果你只有包含文本然后是数字的字符串,并且你想要 {text: number},你应该只需根据整数字符进行分割,而不需要使用机器学习。如果你的字符串包含在更完整的文本文档中,那么提供一个完整的示例会更容易理解。
如果你的句子在一个文本中,比如说:
text = " 如果你的导入因为缺少包而失败,你可以使用pip。非流动资产 5 675 5 512 4 789 4 586。我们还预计现金等价物 909 861 912 630 总计"
你可以使用词性标注和分块来检测数字前的名词组:
就像这个:https://medium.com/@acrosson/extracting-names-emails-and-phone-numbers-5d576354baa
import nltkfrom nltk.corpus import stopwordsnltk.download('stopwords')nltk.download('punkt')stop = stopwords.words('english')document = ' '.join([i for i in text.split() if i not in stop])sentences = nltk.sent_tokenize(document)sentences = [nltk.word_tokenize(sent) for sent in sentences]nltk.download('averaged_perceptron_tagger')sentences = [nltk.pos_tag(sent) for sent in sentences]
然后sentences是:
[[('如果', 'IN'), ('导入', 'NN'), ('因为', 'VBG'), ('缺少', 'JJ'), ('包', 'VBG'), ('而', 'NN'), (',', ','), ('使用', 'NN'), ('pip', 'NN'), ('.', '.')],[('非流动', 'JJ'), ('资产', 'NNS'), ('5', 'CD'), ('675', 'CD'), ('5', 'CD'), ('512', 'CD'), ('4', 'CD'), ('789', 'CD'), ('4', 'CD'), ('586', 'CD'), ('.', '.')],[('我们', 'PRP'), ('还', 'RB'), ('预计', 'VBP'), ('现金', 'NN'), ('等价物', 'NNS'), ('909', 'CD'), ('861', 'CD'), ('912', 'CD'), ('630', 'CD'), ('总计', 'NN')]]
你可以根据语法定义正则表达式来检测数字前的名词组,比如:
grammar = """MATCH:{<JJ><NNS><CD>}""" #语法需要完成cp = nltk.RegexpParser(grammar)for sentence in sentences: print(cp.parse(sentence))
这将返回:
(S 如果/IN 导入/NN 因为/VBG 缺少/JJ 包/VBG 而/NN ,/, 使用/NN pip/NN ./.)(S (MATCH 非流动/JJ 资产/NNS 5/CD) 675/CD 5/CD 512/CD 4/CD 789/CD 4/CD 586/CD ./.)(S 我们/PRP 还/RB 预计/VBP 现金/NN 等价物/NNS 909/CD 861/CD 912/CD 630/CD 总计/NN)
我认为,如果你不是专家的话,从头开始使用TensorFlow来做这件事会困难得多