自然语言处理——将文本特征转换为特征向量

Posted

技术标签:

【中文标题】自然语言处理——将文本特征转换为特征向量【英文标题】:Natural Language Processing - Converting Text Features Into Feature Vectors 【发布时间】:2013-05-25 06:53:34 【问题描述】:

所以我一直在从事一个自然语言处理项目,我需要在该项目中对不同的写作风格进行分类。假设我已经从文本中提取了语义特征,我计划使用 Java 中的 Weka 来训练 SVM 分类器,使用这些特征可以对其他不同的文本进行分类。

我遇到的问题是,要训练 SVM,必须将特征转换为特征向量。我不确定您如何将词汇丰富度、n-gram、标点符号、段落数和段落长度等特征表示为向量中的数字。如果有人能指出正确的方向,那将不胜感激。

【问题讨论】:

不确定你到底在寻找什么,但希望我的小例子能帮到你。祝你好运。 【参考方案1】:

我不确定你的属性可以取什么值,但也许这个例子会对你有所帮助:

假设我们正在进行一个有监督的学习实验,试图确定句号是否标志着句子的结尾,分别为EOSNEOS。训练数据来自段落样式格式的普通句子,但被转换为以下向量模型:

第 1 列:类别:句末或非句末 第 2-8 列:围绕相关期间的 +/- 3 个单词 第 9,10 列:分别在下一个可靠句子分隔符(例如 ?、! 或段落标记)之前的句点的左/右字数。 第 11 列:句点后面的空格数。

当然,这不是一个很难解决的复杂问题,但它是对 Weka 的一个很好的介绍。我们不能只使用单词作为特征(真正的高维空间),但我们可以获取它们的 POS(词性)标签。我们还可以提取单词的长度,单词是否大写等。

因此,您可以提供任何东西作为测试数据,只要您能够将其转换为上面的矢量模型并提取 .arff 中使用的特征。

以下(非常小部分).arff 文件用于确定句子中的句点是否标记了结尾:

@relation period

@attribute minus_three 'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'
@attribute minus_three_length real
@attribute minus_three_case 'UC','LC','NA'
@attribute minus_two 'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'
@attribute minus_two_length real
@attribute minus_two_case 'UC','LC','NA'
@attribute minus_one 'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'
@attribute minus_one_length real
@attribute minus_one_case 'UC','LC','NA'
@attribute plus_one 'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'
@attribute plus_one_length real
@attribute plus_one_case 'UC','LC','NA'
@attribute plus_two 'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'
@attribute plus_two_length real
@attribute plus_two_case 'UC','LC','NA'
@attribute plus_three 'CC', 'CD', 'DT', 'FW', 'IN', 'JJ', 'JJR', 'JJS', 'LS', 'MD', 'NN', 'NNPS', 'NNS', 'NP', 'PDT', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'RP', 'UH', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WDT', 'WP','WRB', 'NUM', 'PUNC', 'NEND', 'RAND'
@attribute plus_three_length real
@attribute plus_three_case 'UC','LC','NA'
@attribute left_before_reliable real
@attribute right_before_reliable real
@attribute spaces_follow_period real
@attribute class  'EOS','NEOS'

@data

VBP, 2, LC,NP, 4, UC,NN, 1, UC,NP, 6, UC,NEND, 1, NA,NN, 7, LC,31,47,1,NEOS
NNS, 10, LC,RBR, 4, LC,VBN, 5, LC,?, 3, NA,NP, 6, UC,NP, 6, UC,93,0,0,EOS
VBD, 4, LC,RB, 2, LC,RP, 4, LC,CC, 3, UC,UH, 5, LC,VBP, 2, LC,19,17,2,EOS

如您所见,每个属性都可以随心所欲:

real 表示实数 我编了LCUC 分别表示大写和小写 大部分其他值都是POS 标签

您需要准确地弄清楚您的特征是什么,以及您将使用什么值来表示/分类它们。然后,您需要将数据转换为 .arff 定义的格式。

为了解决您的标点问题,假设我们的句子都以.? 结尾。你可以有一个名为 punc 的属性,它有两个值:

@attribute punc 'p','q'

我没有使用?,因为这是(通常)在缺少数据点时分配的内容。我们的 you 可以有布尔属性来指示一个字符或你是否在场(使用 0、1 或 false、true)。另一个例子,但为了质量:

@attribute quality 'great','good', 'poor'

如何确定所述分类取决于您,但以上内容应该可以帮助您入门。祝你好运。

【讨论】:

我试图尽可能详细,但我使用的是平板电脑——这很难。

以上是关于自然语言处理——将文本特征转换为特征向量的主要内容,如果未能解决你的问题,请参考以下文章

Spark2.0 特征提取转换选择之二:特征选择文本处理,以中文自然语言处理(情感分类)为例

ML.NET Cookbook:(18)如何在文本数据上训练模型?

自然语言处理_一般处理流程

文本挖掘——文本特征TFIDF权重计算及文本向量空间VSM表示

自用文本分类 -> 特征提取方法

12-文本数据提取方法--简介