【问题标题】:Training fasttext word embedding on your own corpus在您自己的语料库上训练 fasttext 词嵌入
【发布时间】:2021-10-15 11:21:42
【问题描述】:

我想在我自己的语料库上训练 fasttext。但是,在继续之前,我有一个小问题。我是否需要将每个句子作为语料库中的不同项目,还是可以将多个句子作为一个项目?

例如,我有这个 DataFrame:

 text                                               |     summary
 ------------------------------------------------------------------
 this is sentence one this is sentence two continue | one two other
 other similar sentences some other                 | word word sent

基本上text这个专栏是一篇文章,所以它有很多句子。由于预处理,我不再有句号.。所以问题是我可以直接做这样的事情还是需要拆分每个句子。

docs = df['text']
vectorizer = TfidfVectorizer()
vectorizer.fit_transform(docs)

从我阅读的教程中,我需要每个句子的单词列表,但是如果我有文章中的单词列表怎么办?有什么区别?这是在你自己的语料库中训练 fasttext 的正确方法吗?

谢谢!

【问题讨论】:

    标签: python tensorflow gensim word-embedding fasttext


    【解决方案1】:

    FastText 需要 text 作为其训练数据——而不是任何预先矢量化的数据,就像 TfidfVectorizer 一样。 (如果那是您的 FastText 流程的一部分,那就错了。)

    Gensim FastText 支持需要将训练语料库作为一个Python 可迭代对象,其中每个项目都是一个字符串词标记列表

    每个令牌列表通常是一些有凝聚力的文本,其中相邻单词在通常的自然语言中具有使用关系。它可能是一个句子、一个段落、一篇文章、一篇文章/章节,或其他任何东西。 Gensim 的唯一限制是每个文本的长度不应超过 10,000 个标记。 (如果你的文本比这更长,它们应该被分割成单独的 10,000 或更少的部分。但不要太担心分割点周围的关联丢失 - 在训练集中对于像 FastText 这样的算法来说足够大,任何这样的上下文丢失都可以忽略不计。)

    【讨论】:

    • 所以,如果文本少于 10k 字。可以按原样使用它们吗?意思是我不需要将每个句子分成一个标记列表?另外,这对 FastText 和 Gensim FastText 都有效吗?这两种方法产生的嵌入矩阵应该没有任何区别吧?
    • Gensim 总是需要每个文本作为一个令牌列表——所以你需要将字符串拆分为单词列表,总是这样。 Gensim(至少在 2021 年最新的 4.1 版本中)将始终忽略超过第 10,000 个位置的标记 - 但如果每个文本已经小于该位置,您将永远不会达到,因此无需担心该限制.我相信 Facebook 的 FastText 的 Python 包装器仍然只将磁盘上的文件作为其语料库 - 所以它自己将文件的每一行拆分为单词,每行上的空格。
    • 由于算法中的有意随机化和高效多线程实现中不可避免的排序随机化,任何运行产生的嵌入都不会与任何其他运行产生的嵌入完全相同。即使使用同一个库,甚至都不期望单个单词在运行之间会处于相似的坐标。相反,整体向量集,以及它们的相对距离/方向,应该是同样有用的,即使有来自训练方差的精确位置和旋转/变换的所有抖动。
    猜你喜欢
    • 1970-01-01
    • 2018-08-04
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    • 2011-03-10
    • 2019-11-23
    • 1970-01-01
    • 2021-03-25
    相关资源
    最近更新 更多