如何为项目确定正确的 NLP 方法

How to decide correct NLP approach for a project

提问人:Bilal Sedef 提问时间:11/2/2023 更新时间:11/3/2023 访问量:30

问:

我正在做一个NLP项目。我的任务是从对话本身确定土耳其呼叫中心对话的类别和情绪得分。我们使用 Python 作为我们的编程语言。但是,在数百种替代解决方案中,我被困在项目的初始阶段。我有 300,000 行客户代表和客户文本数据,我已经在预处理阶段很好地清理了它们。目前,所有文件都采用句子标记化形式,并已通过其他标准预处理阶段。客户代表和客户对话在~600 MB csv 的不同列中准备就绪。在决定建模算法之前,我的经理希望我准备训练数据集。数据集应包含以下信息,稍后我们将决定哪些是必需的,哪些是不必要的,然后我们将最终确定数据集:

1. Word vectors should be extracted  
2. Sentence vectors should be extracted  
3. Summaries of the conversations should be extracted, and sentence and word vectors of these summaries should be extracted  
4. NER counts should be extracted  
5. POS counts should be extracted  
6. Morphological analysis should be extracted, and affixes, conjunctions, etc. should be shown numerically  
7. Sentiment score should be extracted in terms of both subjectivity and polarity  
8. Keywords and their vectors should be extracted  
9. Topic modeling should be done, and which topic each conversation is closest to should be added to the dataset  
10. Similarity scores between summary and main conversations should be extracted  
11. The rarity ratio of the words mentioned in a conversation should be extracted and the average should be taken sentence by sentence (We think it will give an idea about how rich the sentence is in terms of meaning)  
   

我面临的问题如下:

  1. 土耳其语最好的词向量提取库是什么?有 Word2vec、NGram、GloVe 等技术。还有一些相对较新的技术,如Fasttext。BERT也是一种选择。我应该选择哪一个?我将如何比较他们的表现?我应该训练自己的模型,还是应该更喜欢预训练的模型?(例如,Fasttext 具有在土耳其语上训练的模型)哪一个优于哪个或更现代?如果它们都使用不同的技术,我应该基于哪篇文章或研究?

  2. Gensim 似乎是一个包含为许多 NLP 问题提供解决方案的工具的库。这是一个如此庞大的库,我什至无法掌握它的全部功能。我应该继续使用 Gensim,还是应该同时使用不同的工具?它能满足我的所有需求吗?我怎么知道?

  3. 有很多工具在做词形还原,这些工具也是矢量化的,因为我也会做词形还原,我应该使用它们的矢量化功能,还是应该从上面提到的最多的矢量化工具中受益?哪一个效果最好?我读过很多比较文章,它们都在谈论不同的结果。

  4. 有在土耳其语上训练的 SBERT 模型用于提取句子向量。当我使用其他工具提取词向量时,当我使用 SBERT 时获得的向量会变得毫无意义吗?毕竟,我将使用不同的方法提取这些内容,它们将位于同一数据集中。

由于这种替代解决方案相互优越性的模糊性,我感到困惑。

实际上,我在这里写这篇文章的原因是为了学习并以访问从事此类项目的人的准确信息的方法和纪律为例。我想从你那里得到的是关于如何正确进行NLP项目的建议,作为一个想要在NLP领域提高自己的人。

发短信 NLP公司 矢 量化 拥抱变压器 快速文本

评论


答:

0赞 gojomo 11/3/2023 #1
  1. 使用词向量实际上只是一个标记化的问题,然后从预训练的模型或根据你自己的数据训练的东西中查找词向量。

如果你有足够的文本,训练你自己的模型可以更好地捕捉你所在领域中单词的独特含义。

您可能希望使用 word2vec 或 FastText 算法来训练单个词向量,如果您使用的是 Python,这些算法的 Gensim 实现可以很好地与许多功能配合使用。

FastText 的潜在好处是,如果土耳其语单词子字符串经常暗示单词的含义,那么当稍后被要求提供它在初始训练中无法识别的单词(“词汇外”)时,您的最终模型可以为您提供一个合成的“猜测”向量,总比没有好。但是:如果你的整个项目将在一个固定的语料库上进行训练,而不是在完全重新训练之前创建一些应用于新项目的固定模型,这不是一个很大的好处。

而且:这些算法的易互换性意味着,一旦你对最终模型有了自己的下游可重复评估,你就可以(并且应该)尝试它们,即使使用各种训练参数,看看什么最有效。

  1. 因为 Gensim 是算法的抓包,所以您不会真正选择“使用 Gensim”。您将决定要尝试的方法,并在 Gensim 具有相关算法的良好实现时将其用作解决方案的一部分。它并没有真正排除或要求太多其他东西。

  2. 不确定您指的是什么工具,但请记住,您可能根本不需要还原。如果你有大量的文本和所有词形式的示例,和/或使用现代密集建模(如你自己训练的 Fasttext 词向量或形成一个更大的域),你可能不需要通过词形还原来合并多个词变体。(这个答案可能会根据土耳其语单词的形态而改变,我对此一无所知。如果它有特别广泛的相关词形式——以至于有些词形太少而无法单独建模——词形还原可能会有很大帮助。但这绝对是你不应该认为你需要的东西——而是测试有和没有的方法。

  3. 如果您使用特定的类似 BERT 的模型进行较长的文本向量化,我认为您会希望坚持使用同一模型的固有词向量进行任何兼容的文本向量到词向量比较。但是,不确定这是否是实际方法中的考虑因素。(如果你从任何神经模型中得到一个高质量的密集文本向量,你可能已经不需要担心每个单词的向量了。

更一般的建议:

你可以从一些简单的经典文本分类/情感分类方法开始——比如对每个文本进行词包式的重新命名,以及简单的分类算法,类似于 sklearn 流程图中的算法,其过程类似于 sklearn 文本指南中所示的过程。

然后,即使初始结果很弱,您也已经有:

  • 关键步骤的骨架/管道,您可以在其中子替代项(例如添加子字 ngram 的文本表示,或词向量平均值,或类似 BERT 的长文本向量 - 而不是简单的词袋)
  • 对最终结果进行一些可重复的定量评估,以检查其他调整何时有所帮助或有害

然后,你从那里改进,尝试替代算法/参数,比较结果。