是否可以在 Python 中将 Gensim 包用于非英语语言



我正在将输入文本与文本文件中的文本进行比较。我为此使用 Gensim 包。在该包中,有几种方法可以将输入字符串与文本文件中的不同字符串进行比较:首先,通过查看单词的出现。只考虑单词的频率,而不考虑语义。因此,在这种情况下,案文的措辞并不重要。然而,结果是"你多大了?"和"你的年龄多大了?"没有相似之处,因为这些句子只由不同的单词组成。我希望这两个句子重叠,因为它们确实具有相同的语义。

我用这个例子来说明这一点。gensim包的corporasimilarities模块用于此目的。但是,输入文本和数据库文件中的文本是荷兰语,而不是英语。

我无法找到您可以在这些模块中使用非英语语言的任何地方,但我也没有阅读过您不能阅读的地方。有人可以告诉我这是否可能吗?如果没有,有谁知道一个可能的好选择?

Gensim 中的算法通常不是特定于英语的,只要文本可以标记成单词即可。所以:你正在尝试的是可能的,Gensim中的算法/示例是一个很好的起点。

您是否尝试了文本上链接的教程示例中的任何代码?结果如何?您提供了多少培训文本?

一般来说,由于算法不是特定于语言的,并且不是从对任何语言的任何先前理解开始的,因此它们所知道的一切都需要从提供的文本中的模式中学习。因此,您需要提供尽可能多的训练数据。

这意味着大多数有趣的算法不会从微小的玩具数据集中学到任何东西,例如:

[
['how', 'old', 'are', 'you', '?'],
['what', 'is', 'your', 'age', '?'],
]

这是因为,在没有任何其他信息的情况下,在算法眼中,这基本上是完全相同的数据,如下所示:

[
['A', 'B', 'C', 'D', 'E'],
['F', 'G', 'H', 'I', 'E'],
]

(只有'E'令牌在不同的位置重复,因此在基于共现的分析级别,它是唯一与其他令牌不同的令牌。

但是,如果您拥有来自目标语言和问题域的数百、数千或数万篇现实文本,那么该算法就不会停留在令牌'B'(又名'old')的单个发育不良示例中。它会有几十个或数百个用法示例,每个示例都有各种不同的周围单词。

在这一点上,这些算法中的数学可以检测到有用的模式。然后很可能会"意识到"'B'('old')和'I'('age')有某种关系。事实上,这些算法中的许多都可以检测到这一点,即使它们从未完全同时出现或相互替换,而只是经常出现其他单词。此时,对更大的语料库进行训练后,您的两个句子可能会被认为是相似的。

所以:

  • 不用担心荷兰语与英语的角度,只要你能很好地将文本分割成单词标记列表
  • 请尝试 Gensim 文档中的示例,但要尽可能多地找到或等待它进行训练的相关训练数据 - 这就是它知道单词/语言的方式,而不是来自任何预编程的定义
  • 如果您遇到问题,请确保您在此处的问题描述您尝试过的内容(最好是使用实际代码)以及为什么结果/错误与预期不符

另一种相关的技术是使用词向量,它可以被训练,或者从其他人的预训练向量加载,然后用于协助执行文本分析的后续步骤。Gensim 没有任何词向量,但它可以用来训练它们或加载其他集合。

将词向量应用于任务的最简单方法可能是:

  • 找到别人的荷兰语词向量(或者自己训练它们 - 如果你有很多好的特定于领域的文本,这可能比别人的通用向量要好得多)
  • 将任何多单词文本更改为其所有单个单词的平均值
  • 比较这些向量作为文本相似性的基本检查

这仍然会错过(或稀释/取消/等)文本的许多人类感知的含义,因为它不考虑语法/词序/上下文/等。但对于广泛的主题比较/检索,这是一个公平的基线。

你训练或找到的任何好的词向量都可能捕捉到'how''what'是疑问词,'old''age'涉及相似的寿命持续时间。因此,这个简单的基线可能会表明您的 2 个句子比其他 4-5 个单词的随机集合更接近。

根据你的最终需求和资源,还有其他更复杂的文本建模或文本比较可以尝试的东西 - 包括也使用词向量作为输入的东西,或者将有序的单词序列输入到更深的神经网络算法中,以创建更多顺序/语法敏感的长文本向量表示。

最新更新