使用Gensim提取词组出错
Error in extracting phrases using Gensim
我正在尝试使用 Gensim 中的短语获取句子中的双字母组,如下所示。
from gensim.models import Phrases
from gensim.models.phrases import Phraser
documents = ["the mayor of new york was there", "machine learning can be useful sometimes","new york mayor was present"]
sentence_stream = [doc.split(" ") for doc in documents]
#print(sentence_stream)
bigram = Phrases(sentence_stream, min_count=1, threshold=2, delimiter=b' ')
bigram_phraser = Phraser(bigram)
for sent in sentence_stream:
tokens_ = bigram_phraser[sent]
print(tokens_)
即使它捕捉"new","york"为"new york",它没有捕捉"machine",学习为"machine learning"
然而,在 example shown in Gensim Website 中,他们能够将 "machine"、"learning" 等词理解为 "machine learning"。
请告诉我如何在上面的示例中将 "machine learning" 作为双字母组合
可能低于你的threshold
?
尝试使用更多数据。
gensim Phrases
使用的技术完全基于共现的统计数据:单词在公式中一起出现的频率与单独出现的频率也受到 min_count
的影响,并与 threshold
值。
只是因为你的训练集有'new'和'york'并排出现两次,而其他词(如'machine'和'learning')只并排出现彼此一次,那个 'new_york' 变成一个二元组,而其他配对则没有。更重要的是,即使您确实找到了 min_count
和 threshold
的组合可以将 'machine_learning' 提升为二元语法,它也会 也 配对在一起other bigram-that-appears-once – 这可能不是你想要的。
真的,要从这些统计技术中获得好的结果,您需要大量不同的、真实的数据。 (由于表面玩具大小的原因,玩具大小的示例可能表面上成功或失败。)
即便如此,他们也往往会错过一个人认为合理的组合,而做出一个人认为不合理的组合。为什么?因为我们的大脑有更复杂的方法(包括语法和现实世界的知识)来决定何时词组代表一个单一的概念。
因此,即使有更多更好的数据,也要为无意义的 n-gram 做好准备。调整或判断模型是否全面改善了您的目标,而不是任何单点或临时检查是否符合您自己的敏感性。
(关于引用的 gensim 文档评论,我敢肯定,如果您只对此处列出的两个句子尝试 Phrases
,它不会找到任何所需的短语 – 而不是 'new_york' 或 'machine_learning'。作为一个形象的例子,省略号 ...
意味着训练集更大,结果表明额外的未显示文本很重要。这只是因为你的第 3 句话添加到您的代码中,检测到 'new_york'。如果您添加类似的示例以使 'machine_learning' 看起来更像是统计上异常的配对,您的代码也可以提升 'machine_learning'。)
我正在尝试使用 Gensim 中的短语获取句子中的双字母组,如下所示。
from gensim.models import Phrases
from gensim.models.phrases import Phraser
documents = ["the mayor of new york was there", "machine learning can be useful sometimes","new york mayor was present"]
sentence_stream = [doc.split(" ") for doc in documents]
#print(sentence_stream)
bigram = Phrases(sentence_stream, min_count=1, threshold=2, delimiter=b' ')
bigram_phraser = Phraser(bigram)
for sent in sentence_stream:
tokens_ = bigram_phraser[sent]
print(tokens_)
即使它捕捉"new","york"为"new york",它没有捕捉"machine",学习为"machine learning"
然而,在 example shown in Gensim Website 中,他们能够将 "machine"、"learning" 等词理解为 "machine learning"。
请告诉我如何在上面的示例中将 "machine learning" 作为双字母组合
可能低于你的threshold
?
尝试使用更多数据。
gensim Phrases
使用的技术完全基于共现的统计数据:单词在公式中一起出现的频率与单独出现的频率也受到 min_count
的影响,并与 threshold
值。
只是因为你的训练集有'new'和'york'并排出现两次,而其他词(如'machine'和'learning')只并排出现彼此一次,那个 'new_york' 变成一个二元组,而其他配对则没有。更重要的是,即使您确实找到了 min_count
和 threshold
的组合可以将 'machine_learning' 提升为二元语法,它也会 也 配对在一起other bigram-that-appears-once – 这可能不是你想要的。
真的,要从这些统计技术中获得好的结果,您需要大量不同的、真实的数据。 (由于表面玩具大小的原因,玩具大小的示例可能表面上成功或失败。)
即便如此,他们也往往会错过一个人认为合理的组合,而做出一个人认为不合理的组合。为什么?因为我们的大脑有更复杂的方法(包括语法和现实世界的知识)来决定何时词组代表一个单一的概念。
因此,即使有更多更好的数据,也要为无意义的 n-gram 做好准备。调整或判断模型是否全面改善了您的目标,而不是任何单点或临时检查是否符合您自己的敏感性。
(关于引用的 gensim 文档评论,我敢肯定,如果您只对此处列出的两个句子尝试 Phrases
,它不会找到任何所需的短语 – 而不是 'new_york' 或 'machine_learning'。作为一个形象的例子,省略号 ...
意味着训练集更大,结果表明额外的未显示文本很重要。这只是因为你的第 3 句话添加到您的代码中,检测到 'new_york'。如果您添加类似的示例以使 'machine_learning' 看起来更像是统计上异常的配对,您的代码也可以提升 'machine_learning'。)