Identifying the Intent of a User Query Using SVM

以前就说过,查询意图分类也属于分类的一种,要做分类,那么大体可以分为两个阶段,一个是特征抽取,另一个就是分类算法。查询意图分类自从开始自动化之旅之后,这两个步骤基本都是没有停过。对于特征,查询本身的特征是非常少的,所以需要一些其他的资源来进行扩展。一个很相关的扩展源就是查询日志,因为日志里面包含的就是对这个查询的相关反扩信息。一般来说,注意力都会集中在“特征抽取”这一阶段,因为后面的分类算法也就那么几种而已。今天读了一篇论文,题目是《Identifying the Intent of a User Query Using SVM》,翻译过来是《基于SVM的用户查询意图识别》,作者是yahoo的Marcelo

 

摘要

本论文将要介绍一种高准确率的查询分类方法。论文将要考虑三种查询的向量表示方法,然后利用SVM方法来尽心分类。查询将用到点击性能系来进行表示:用户浏览一个文档的时间以及被点击文档的流行度。结果显示,时间是一个能够获得高准确率的因素。

 

分类器

特征

三个向量表示方法,基于两个信息源的组合:文本以及点击信息。也就是将查询表示成一个有词语组成的向量,这些词语由查询此以及被选择的文档来表示。方法会考虑用户在选择之前阅读到的词语,以及选择结果之后的阅读时间。

描述文本和点击

我们规定一个查询Session就是< 查询,( 点击URL )* >。一个搜索引擎的返回结果通常是:标题、URL和一些片段。这三个因素中的一个和查询相关,结果就会被选择。向量表示同样用TF*IDF模式,词语的产生就是基于这三个资源。

对于一个查询q,Sq表示包含了q的session,Ds表示Sq的结果集合。那么对于q,就有了一个他的相关文档集合,所以可以对其中的词语统计TF信息。然后还会加上一个每个文档的在这个查询中的被点击信息,就可以计算词语在向量中的权值了。具体计算可以参见论文,这里第二个信息其实就相当于IDF了,他的含义就是这个文档在区分不同的查询时的贡献。

描述文本和阅读时间

这里除了考虑返回文档的文本信息之外,还需要用到一个时间信息。这个时间其实就是每个结果文档用户花费的阅读时间。在最终计算这个向量的每个词的权值的时候,一方面是考虑日志中的查询来作为一个文本集合,然后返回文档来作为一个文档集合。计算公式很长,但是很简单,一个大的原则就是TF*IDF,而且这里的时间信息是用作IDF的。

描述文本、阅读时间和点击

在上面的表示上,还加上了一个点击信息来作为IDF的因子。

分类算法

从上面的分析可以看到,在特征选择上面,没有进行计算特征权值然后再抽取好的特征,所以特征向量的维数非常大。对于这种高维空间的分类来说,SVM应该是非常合适的。

 

实验结果

数据集

数据集也需要专家进行人工的分类一些查询,然后用其中70%作为训练集,30%作为测试集。这里用到SVM工具包是LIBSVM,里面由两个参数需要估算,采用交叉验证的方法来进行估算。

结果

结果从错误率、准确率、召回率和F度量来进行比较。Baseline是直接用TF*IDF。结果显示tf*idf*time的组合结果是最好的。

 

这个论文非常的长,但是里面很大一部分都是重复在叙述,比如各个特征的组合。这里的一个问题是分类器是基于已有的日志进行训练,测试也是基于已有的日志。那么对于新来的查询,该如何作。查询分类现在的重点就是集中在特征上面,这是由于web查询本身的短小、模糊的特点决定了的。该如何抽取特征,或者是换另外的思路来做,这是一个问题。

Profiling is the process of analyzing the performance of a program or function in order to identify bottlenecks or areas for optimization. cProfile is a built-in Python module that allows you to profile your code and generate a report of the performance metrics. To optimize the performance of a slow-running function using cProfile, you can follow these steps: 1. Import the cProfile module at the top of your Python file: ``` import cProfile ``` 2. Define the function that you want to profile: ``` def my_function(): # code goes here ``` 3. Run the function with cProfile: ``` cProfile.run('my_function()') ``` This will generate a report of the performance metrics for your function. 4. Analyze the report to identify bottlenecks or areas for optimization. The cProfile report will show you the number of times each function was called, the total time spent in each function, and the amount of time spent in each function call. Look for functions that are called frequently or that take a long time to execute. 5. Make changes to optimize the function. Once you have identified the bottlenecks, you can make changes to your code to optimize the function. This may involve simplifying the code, reducing the number of function calls, or using more efficient algorithms or data structures. 6. Repeat the profiling process to measure the impact of your changes. After making changes to your code, run the function again with cProfile to see if the performance has improved. If not, you may need to make additional changes or try a different approach. By using cProfile to profile your code and identify bottlenecks, you can optimize the performance of slow-running functions and improve the overall efficiency of your Python programs.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值