短文本/Query分类算法特征选择

针对大量行业标签的短文本分类任务,介绍了一种融合字面与语义特征的方法。利用N-gram及PLSA/LDA模型增强特征表示,提高分类准确率。

           短文本/Query分类算法特征选择   

最近工作中有一个project需要对query进行行业分类(label较多,大于1k),在以往的长文本中,一般使用文本的词向量结合tf-idf作为权重,分类的效果基本上还是非常不错。但是短文本,特征向量非常稀疏,一般一个 query只有1个或者几个特征,因而在覆盖率和准确率上将会大打折扣。

本文的主要目的是对短文本的特征选择做一些尝试,语义特征主要分类字面特征和语义特征两类。分类模型可以使用ME,SVM或者DNN等。

1.      字面特征:

a.      N-gram特征(一般N为2)

比如:一个query 可以被切词为:T1 T2 T3,那么我们可以把T1、T2、T3、BEG_T1,T1T2、T2T3、T3_END可以作为特征。权值可以计算 tf-idf值归一化后就可以

B. 摘要扩展

使用一个query在搜索引擎得到其自然结果,作为特征的扩展

2.      语义特征:

现在应用比较广泛的语义特征主要通过PLSA/LDA模型得到,因为是对query的分类,所以PLSA的模型训练使用 query及其摘要数据进行训练,训练之后,得到 p(z|q) 、p(z)和p(w|z)向量。从而对于一个query向量,可以得到这个query的p(z|q)向量(具体的计算query的p(z|q)过程就不详细叙述了)

                   语义特征又可以分为两类

a.      Topic_id 特征,  PLSA模型的p(zi|q)有一个意义就是q(query) 属于zi的概率,

因而,可以把PLSA作为一个聚类算法,而topicid,就是所在的簇id。在实验中一般取 p(zi|q)排前3的zi 作为特征,而p(zi|q)则作为feature权值。

如:“清华大学招生”的feature为:175: 0.295 605:0148 646:0.096

Label:”本科教育”的feature为:175:0.185 675:0.152 119:0.084

Label:” 汽车用品”的feature为:372:0.635 682:0.084 174:0.0506

因为“清华大学招生”与Lable“本科教育”同时有较大概率在簇:175,而与Lable“汽车用品”没有在同一个簇中。所以更倾向于分类至Label”本科教育”

b.      Query与行业Label的plsa向量。

一般而言,一个query属于某个行业类的label的plsa_sim值大,则属于这个行业的概率也高

比如:“清华大学招生”和行业label “本科教育”的语义相似度为:0.547,而与行业Lable”汽车用品”的相似度仅为0.002.

               在实验中通过引入语义特征,对query的召回和准确在ME模型上都有了比较大的提升,稍后有时间再整理一个实验评估效果。

文本关系算法在自然语言处理中至关重要,以下是相关介绍: - **文本聚类算法**:聚类思想是将若干文本进行相似度比较,最后将相似度高的归为一类。一般步骤包括文本表示、聚类算法选择或设计、聚类评估。常用的文本聚类算法有K - means、BIRCH、GMM(高斯混合模型聚类)、GAAC(凝聚层次聚类)等[^2]。 - **分类与聚类的对比**:分类和聚类都是文本挖掘中常使用的方法,目的都是将相似度高的对象归类。不同点在于分类是采用监督学习,按照已经定义好的类别来识别一篇文本;而聚类是无监督学习,直接对若干文本进行相似度比较后归类。由于微博文本具有大数据特性及不确定性,标注数据难度大,因此对于大量且随机的微博文本常采用聚类算法处理[^3]。 - **BM25相关性得分计算**:对于BM25,可以使用rank_bm25库来计算文档的得分,以此获取一个相似度的度量。不过BM25本身不直接计算相似度,而是计算查询和文档之间的相关性得分。要计算相似度,可将得分标准化或比较得分的大小。以下是使用BM25计算文本之间相关性得分的示例代码: ```python from rank_bm25 import BM25Okapi import jieba # 用于中文分词 # 假设我们有两个文本 text1 = "我喜欢阅读科幻小说。" text2 = "科幻小说是我最喜欢的书籍类型之一。" # 对文本进行分词 tokenized_text1 = list(jieba.cut(text1)) tokenized_text2 = list(jieba.cut(text2)) # 将一个文本作为查询,另一个文本作为文档集合 query = tokenized_text1 documents = [tokenized_text2] # 初始化BM25模型 bm25 = BM25Okapi(documents) # 计算查询和每个文档之间的BM25得分 scores = bm25.get_document_scores(query, k1=1.5, b=0.75) # 输出得分作为相似度的度量(这不是标准的相似度计算,但可以作为一个指标) print(f"文本之间的BM25得分: {scores[0]}") ``` - **自动打标算法TF - IDF**:在对文本文件进行打标时,有一种自动打标的算法TF - IDF,它有助于人们对文章进行分类,例如在足球比赛新闻正文前标注“体育”“足球”等标签[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值