电商实验记录(个人)

电商实验记录

阶段一、二

算法流程

  1. 首先通过dataPreprocess函数读取查询记录:user_tag_query.train文件,之后将搜索信息一行一行地存储到1_raws_words文件中;

  2. 之后通过dataCleanWord函数读取1_raws_words文件中的数据,一行一行地判断是否是汉字,将所有字母数字以及特殊字符全部去除,只留下了中文汉字,将得到的结果按行存在2_without_useless_words文件中;(这里只保留汉字的做法是不对的,我之后会改\longrightarrow去除链接)

  3. 然后通过函数findRelatedWords读取2_without_useless_words文件中的数据,并根据种子关键词挑选出于种子关键词相关的搜索条目,同样按行存储在文件3_related_words中;

  4. 又通过函数dataSegmention读取3_related_words中一行一行的数据,然后调用jieba库采用jieba的精确模式(jieba.cut())对每一行中文文本信息进行分词,并存储到4_seg_words文件中;

  5. 然后通过函数dataStopWord读取4_seg_words中的数据,并根据事先设定好的停用词列表,去除4_seg_words中的停用词,之后将结果存储在5_without_stopped_words文件中;

  6. 之后就可以通过函数dataWordCounter对5_without_stopped_words文件中的数据进行词频统计,并按照降序方式存储到文件6_counts_words中;

  7. 然后就能根据函数findMediKeywords找到权重最大(词频数最大)的前10个词作为中介关键词,并将结果按词频数降序存储到7_mediation_words文件中;

  8. 最后就是计算竞争性comp测度:

  • 通过dataCompkey函数读取7_mediation_words文件中的数据,然后利用for循环将每一个中介关键词产生的与种子关键词具有竞争性的竞争关键词的候选集合以及竞争测度计算出来

    • 从2_without_useless_words文件中读取数据,然后对数据进行分析,找到包含中介关键词的搜索条目,并存储到8_with_mediation_words文件中;
    • 然后对得到的8_with_mediation_words文件内容进行分词、去除停用词、词频统计;
    • 最后从得到的11_with_counts_words文件中挑选出既不含种子关键词,也不含中介关键词同时保证词长度大于等于2的竞争关键词;
  • 设定a、ka、sa并统计相应的搜索量,然后根据竞争度计算公式进行计算得到最后的竞争度;

  • 之后重复循环直到完成10个中介关键词的所有相关竞争关键词竞争度的计算,然后降序排序存入对应的文件中。

进一步优化

当前存在的缺陷:

  1. 在数据处理阶段采用了一刀切的方式将除了汉字之外的所有的符号、链接等全部去除,但是就一般来说,有些字母符号以及英文缩写对分析是十分重要的;

  2. 现有的分词方法采用的是jieba库,对于新词和歧义词的辨识较差;

  3. 停用词列表有待扩充,现阶段只是设计了简单的单个词以及少量的两个词和三个词,但是实际情况应该是多字词都可能存在停用的可能\longrightarrow自动化词库

    • stop_word_list = {'\n', '\t', '\r', '为什么', '怎么办', '哪个', '之', '多少', '可以', '的', '与', '了', "在",
                                '是', "我", "和", "就", "不", "都", "一", "一个", "上", "也", "很", "到", "说", "要", "去",
                                "你", "会", "着", "没有", "看", "好", "自己", "这", '呢', '怎样', '如何', '什么', '', ' ',
                                '怎么', '吗', '有'}
      
      1
      2
      3
      4
      5
      6
      7

      -

      ```Python
      # 一些分词的事例
      三国演义 小说 百度 云
      陈赫 玩 王者 荣耀

优化的方向和方法:

  1. 考虑根据词性进行分词操作,分析是否能够提升效率以及降低成本

  2. jieba库支持用户自己添加的词典:\longrightarrow自动化词库

  3. 变体词识别和替换

    • 定义:网络书写具有随意性、非正规性等特点。变体词就是网络语言作为一种不规范语言的显著特色, 人们往往出于避免审查、表达情感、讽刺、娱乐等需求将相对严肃、规范、敏感的词用相对不规范、不敏感的词来代替, 用来代替原来词的新词就叫做变体词(Morph)

    • 由于变体词的隐喻,导致需要将变体词的还原成本来的词语,避免对文义分析产生偏差

    • 例如:image-20221021114639593

    • 参考:(77条消息) 文本信息过滤中的变体词识别(一)_wuyijian_ml的博客-CSDN博客_变体词

  4. 不同搜索类型

    • 可以为用户提供不同的关键词搜索类型,不同的搜索类型将使用不同的常用词库来进行分词,提高种子关键词的相关竞争性关键词的准确率

      • 例如:用户选择饮食相关的搜索类型时可以使用对应的常用词库(**词条样例:**土豆、火锅、意大利面、果佳、猴头菇……),如此提高结果的准确率
    • 搜索类型:

      • 饮食
      • 汽车
      • 电商
      • 医学
      • 法律
      • 动植物
      • 地域(中国、意大利、德国……)
    • 词库参考:THUOCL:清华大学开放中文词库 (thunlp.org)

  5. jieba库支持4种分词模式(扩展分词模式的选择?)

    • 精确模式:试图将句子最精确地切开,适合文本分析;
    • 全模式:把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义
    • 搜索引擎模式:在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词
    • paddle模式:利用PaddlePaddle深度学习框架,训练序列标注(双向GRU)网络模型实现分词。同时支持词性标注。(应该是百度提供的分词模型)

老师建议:词库要做成自动化的;每一个中介关键词都会产生多个竞争性关键词,不能简单地只取其中词频数最多的作为竞争关键词。

阶段三

关键词工具参考:

  1. 谷歌关键词工具:kwfinder、keywordtool
  2. 网站流量、关键词分析:semrush

内容:

  • 软件系统概述

    • 竞争性关键词推荐系统
  • 软件系统结构设计

    • 子系统之一:用户服务子系统
    • 子系统之二:分词算法子系统
  • 功能模块设计

    • 用户服务子系统

      • 用户管理模块(用户的登录注册以及信息修改等)
      • 文档管理模块(用于管理推荐输出的文档,可以查看历史文档并下载等、问卷的填写和问卷数据的查看)
      • 分词管理模块(用户可以选择多种分词方法,同时能够根据不同分词方法得到的结果进行比较;用户根据需要选择不同的搜索类型,提高结果的精确度)
      • 图表展示模块(用户能够查看得到的算法的效率曲线图、分词结果的反映竞争性程度的柱状图、展示的关键词的区域热度图)
    • 分词算法子系统

      • 数据预处理模块(将原始数据处理成一行一行的形式存储到指定文件1中)
      • 分词处理模块(包含了从上一模块(预处理)的文件中查找包含了种子关键词的所有搜索条目并存储到指定文件2中、对文件2中的所有搜索条目进行分词处理并存储到文件3中)
      • 清洗与统计模块(包含将得到的文件3中所有词进行清除停用词处理以及变体词识别和替换处理、统计得到的所有词并按词频降序存入指定文件中、根据词频统计结果找到中介关键词)
      • 竞争度计算模块(计算comp测度,计算出每一个输入种子关键词的所有通过对应中介关键词联系起来的竞争关键词,并最后根据对应的竞争度降序输出呈现在前端)
    • 补充:

      • 停用词和常用词库会存在文件服务器上,数据库中存储相应的路径信息,管理员可以修改停用词和常用词库以达到更新的目的,用户可以增加自己的个人词典并提交存储到文件服务器上

        • 常用词库和自建个人词典的意义在于:分词会将例如王者荣耀四个字分为王者和荣耀,在我们的认知中这四个字最好是作为一个整体,所以通过添加自建词典可以避免这样的问题;

          • # 一些分词的事例
            三国演义	小说	百度	云
            陈赫	玩	王者	荣耀
            
  • 数据库设计

image-20221104101304242

系统设计参考:一个完整推荐系统的设计实现-以百度关键词搜索推荐为例 - 思享SEO博客 (4xseo.com)

详细参考:Semocean – 和自己赛跑的人

在实践中, 一个完整的推荐系统会主要由3部分组成:

  1. User Profile

  2. 基础推荐挖掘算法

  3. Ranking

user profile主要是用户(注册)信息,以及对用户反馈的信息进行处理,聚合,用于描述用户的特征; 是后续推荐和排序的基石。

变体词的识别和替换实现思路

参考之一:文本信息过滤中的变体词识别(一) - 代码天地 (codetd.com)

参考之二:文本信息过滤中的变体词识别(二) - 代码天地 (codetd.com)

img

阶段四

基本功能:
  • 去停用词

  • 分词

  • 找到竞争关键词

    • 每个中介关键词会对应多个竞争性关键词
拓展功能:

image-20221110162243614

  1. 在数据清洗时就将变体词识别并替换掉✔️

参考:(77条消息) 文本信息过滤中的变体词识别(一)_wuyijian_ml的博客-CSDN博客_变体词

可以考虑的功能:

性能方面的优化:

提前缓存:读结果

多线程

关键词推荐系统设计

功能方面:

  1. 搜索(多种选择-分类搜索、多种分词方法、数据量选择、多线程、词库选择(系统或是用户:变体词库、常用词库、停用库、各种领域的词库)、是否考虑繁体中文(即:是否将繁体转换为简体))

    • 分类搜索:(动物、财经、交通、成语、地名、食物、IT、法律、历史名人、医疗、诗词)
      • 首先在项目内部的/static/tmp下寻找是否有对应的词库,如果有则直接使用本地词库即可,如果没有说明是系统新增词库,这时再执行从文件服务器上下载词库的操作——提高效率
    • 多种分词方法(目前是jieba、ltp、HanTP)
    • 数据量选择(单位是……行)
    • 多线程(线程数选择)
    • 词库选择(变体词库、常用词库、停用库、各种领域的词库)
    • 是否考虑繁体中文(是否将繁体转换为简体)
    • 对字母不区分大小写(如:QQ与qq相同)
    • 用户指定一个中介关键词产生竞争性关键词的数量
  2. 呈现结果(结果:以列表形式呈现,如果之前已经搜索过就直接从文件服务器上获取,用户自行设置是否发送文件到邮箱?)

    • 将所有文件放到文件服务器中,直接对文件服务器上的文件进行读写操作
  3. 查看词库(以列表形式呈现基本信息,用户可以选择下载-别人提供的词库等)

  4. 上传用户词库(填表单(后端拿userid,用户填词库名称、词库的类型-自定义、词库的简介、是否共享),然后上传文件)

  5. 展示分词方法的信息板块-丰富系统内容

  6. 呈现所有的用户得到的结果(列表形式展现结果文件信息,可以选择下载)

性能优化方面:

  1. 提前缓存:读已有结果(其他用户搜索过的结果)

  2. 多线程

分词方法

python分词中文分词包—分别是snownlp,thulac和pynlpir,最后再结合pyecharts以词云的方式显示最终分词结果

jieba✔️

ltp✔️

官方文档:使用 pyltp — pyltp 0.2.0 文档

HanTP✔️

官网参考:HanLP官网

GitHub:hankcs/HanLP: 中文分词 词性标注 命名实体识别 依存句法分析 成分句法分析 语义依存分析 语义角色标注 指代消解 风格转换 语义相似度 新词发现 关键词短语提取 自动摘要 文本分类聚类 拼音简繁转换 自然语言处理 (github.com)

官方演示文档:中文分词 | 在线演示 (hankcs.com)

申请免费密钥:https://bbs.hanlp.com/t/hanlp2-1-restful-api/53

pyhanlp :pyhanlp · PyPI

image-20221116002211509

image-20221116002331227

Django框架

参考:Django 简介 | 菜鸟教程 (runoob.com)

工厂设计模式

参考:(77条消息) Python之23种设计模式_Burgess_zheng的博客-CSDN博客_python 设计模式

重写(Override)是父类与子类之间多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Override)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。

重载(Overload)是一个类中多态性的一种表现。如果在一个类中定义了多个同名的方法,它们参数列表不同,则称为方法的重载(Overload)

  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.
  • Copyrights © 2023-2024 Guijie Wang
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信