Kaggle - Home Depot Product Search Relevance 进阶篇

论坛 期权论坛     
选择匿名的用户   2021-5-28 02:15   43   0
<h5></h5>
<h5>Github: <a href="https://github.com/yjfiejd/Product_search_relevance_NLP-/blob/master/product_search_relevance_advanced.ipynb">https://github.com/yjfiejd/Product_search_relevance_NLP-/blob/master/product_search_relevance_advanced.ipynb</a> (可查看jupyter notebook)</h5>
<ul><li>基础篇与进阶篇最大的区别:特征提取的方式不同</li></ul>
<ul><li>基础篇中特征的提取太粗糙:1)关键字常长度 2)用搜索词中的单词在产品title、产品介绍中出现的次数来衡量</li><li>进阶篇的特征提取:采用了3中方法,在原有文本上共提取出了6个新的特征</li></ul>
<ol><li>Levenshtein : 用来计算字符串之间的距离 -&gt; 2个新特征 -&gt; 搜索词句子与产品title,搜索词与产品描述直接的距离</li><li>TF-idf构造特征: -&gt; 2个新特征
  <ol><li>新建all_text列(放入product_title&#43;product_description,组合为一条句子)<br></li><li>把all_text列中每一个格子的句子拆分为单词(gensim.utils库中的Tokenize) -&gt; 包含221877单词的大字典 -&gt; 语料库用iterator实现,用class来实现<br></li><li>得到标准形式的语料库 TfidModel(corpus)<br></li><li>用MatrixSimilarity计算相似度,计算两条句子的相似度 -&gt; 增加两个特征 -&gt; 搜索词与产品title、搜索词与产品描述的相似度<br></li></ol></li><li>通过Word2Vec来评判距离,搜索词与产品title,产品描述的 -&gt; 2个新特征
  <ol><li>nltk也是自带一个强大的句子分割器。【调用工具】<br></li><li>我们先把长文本搞成list of 句子,再把句子变成list of 单词:【文本-&gt;句子】<br></li><li>我们把list of lists 给 flatten了。【句子 -&gt; 扁平化flatten】<br></li><li>我们把句子里的单词给分好。可以用刚刚Gensim的tokenizer, 也可以用nltk的word_tokenizer 【句子 -&gt; 单词】<br></li><li>训练我们的预料库,成为词向量 【单词 -&gt; 训练语料库model】<br></li><li>可以得到每个单词的向量,但是每一格句子中由多个单词组成,把每个单词向量取平均,<br></li><li>计算两个句子的vector的相似度, 用cosine similarity,用scipy的spatial功能<br></li><li>应用在两列上, 得到新的2个特征:df_all.apply(lambda x: w2v_cos_sim(x[&#39;search_term&#39;], x[&#39;product_title&#39;]), axis&#61;1)<br></li><li>去掉不需要的column,给drop掉, 留下新特征<br></li></ol></li></ol>
<p>代码如下:</p>
<pre class="blockcode"><code class="language-python"># -*- coding:utf8 -*-
# &#64;TIME : 2018/4/27 上午6:15
# &#64;Author : Allen
# &#64;File : product_search_relevance_advanced.py

#目的:给出输入关键字与搜索结果,评价搜索准确度
</code></pre>
<pre class="blockcode"><code class="language-python">#读取数据
df_train &#61; pd.read_csv(&#39;train.csv&#39;, encoding &#61; &#34;ISO-8859-1&#34;)
df_test &#61; pd.read_csv(&#39;test.csv&#39;, encoding &#61; &#34;ISO-8859-1&#34;)
df_desc &#61; pd.read_csv(&#39;product_descriptions.csv&#39;)</code></pre>
<pre class="blockcode"><code class="language-python">#处理思路
#1,导入包、数据  -&gt; 合并数据格式concat,merge,
#2,文本预处理 -&gt; 【简单方法】:看输入词是在搜索结果中出现几次,需要先统一数据集格式 -&gt; str_stemmer and str_commond_words 处理数据
#3,自制文本特征 -&gt; 关键词长度/搜索词语与title和describtion中重复词语数 -&gt; 去掉之前的英文,保留自制特征
#4,重塑训练/测试集 -&gt; 拆分出X_train, X_test, y_train, 去除label
#5,建立模型:Ridge回归模型RandomForestRegressor 找出最佳参数max_depth&#61;7 通过多种参数导入 -&gt; 画图
#6,上传结果:生成csv文件</code></pre>
<pre class="blockcode"><code class="language-python">#########1) 导入需要用的库
import numpy as np
import pandas as pd
from sklearn.ensemble import RandomForestClassifier, BaggingRegressor
from nltk.stem.snowball import SnowballStemmer
import os
# 解决路径报错问题:SyntaxError: (unicode error) &#39;unicodeescape&#39;:https://www.cnblogs.com/renfanzi/p/6307074.html
f &#61; r&#39;C:\Users\xiaochen.liu\Desktop\product_search_relevance&#39;
os.chdir(f)
</code></pre>
<pre class="blockcode"><code class="language-python">#读取数据
df_train &#61; pd.read_csv(&#39;train.csv&#39;, encoding &#61; &#34;ISO-8859-1&#34;)
df_test &#61; pd.read_csv(&#39;test.csv&#39;, encoding &#61; &#34;ISO-8859-1&#34;)
df_desc &#61; pd.read_csv(&#39;product_descriptions.csv&#39;)</code></pre>
<pre class="blockcode"><code class="language-python">#合并测试集与训练集,便于统一文本预处理
#PANDAS 数据合并与重塑(concat篇):https://blog.csdn.net/stevenkwong/article/details/52528616
#PANDAS 数据合并与重塑(join/merge篇):https://blog.csdn.net/stevenkwong/article/details/52540605
df_all &#61; pd.concat((df_train, df_test), axis&#61;0, ignore_index&#61;True)
df_all.head()
#print(df_all.shape)</code></pre>
<pre class="blockcode"><code class="language-python">#把描述信息加入表,how&#61;&#39;left&#39;表示左边全部保留,on表
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP