【问题标题】:Is it possible to use the Gensim package for non-English languages in Python?是否可以在 Python 中将 Gensim 包用于非英语语言?
【发布时间】:2021-04-22 09:48:26
【问题描述】:

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

我为此使用this examplegensim 包的 corporasimilarities 模块用于此目的。但是,输入文本和数据库文件中的文本是荷兰语,而不是英语。

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

【问题讨论】:

    标签: python gensim similarity


    【解决方案1】:

    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') 有某种关系。事实上,这些算法中的许多都可以检测到,即使它们从未完全同时出现或相互替换,而只是具有它们经常出现的 other 词。那时,在更大的语料库上训练后,你的两个句子可能会被识别为相似。

    所以:

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

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

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

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

    这仍然会遗漏(或淡化/取消/等)大量人类感知的文本含义,因为它不考虑语法/词序/上下文/等。但对于广泛的主题比较/检索,这是一个公平的基准。

    您训练或找到的任何好的词向量都可能在其自身中捕捉到 'how''what' 是问题词,而 'old''age' 关注相似的生命周期。所以这个简单的基线可能表明你的 2 个句子比其他 4-5 个单词的随机集合更接近。

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

    【讨论】:

      猜你喜欢
      • 2016-07-29
      • 1970-01-01
      • 2021-04-03
      • 1970-01-01
      • 2019-01-27
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 2017-07-29
      相关资源
      最近更新 更多