机器学习项目 (代码梳理)where2go第二弹
参加答辩的学生需要携带纸质版三个文档(概要设计说明书,数据库设计说明书,详细设计说明书)(各1份),电子版PPT,汇报时间控制在5分钟左右。汇报时,需进行项目演示,数据库讲解等。
目录
1.进度计划
2019年8月—2019年9月
收集查阅资料,并进行社会调查,确定系统需求
2019年9月—2019年10月
进行数据收集,获取并分析互联网上景点的相关信息
2019年10月—2019年11月
进行探索性数据分析(EDA)和数据清理
2019年11月—2019年12月
实现基于gensim 的 word2vec 模型,并编写矢量化用户搜索查询的函数
筛选实际地理位置的推荐,以geojson格式输出目的地的函数
2019年12月—2020年1月
设计实现Web 端应用程序,完成核心推荐模型在Web端的展示
(正在进行)
2020年1月—2020年2月
丰富用户交互功能,对客户端进行测试,并解决测试发现的问题
2020年2月—2020年3月
完成软件开发文档,编撰用户手册。
2.系统需求
(这个和开题基本一致,就简略回顾一下)
2019年8月—2019年9月
收集查阅资料,并进行社会调查,确定系统需求
系统功能结构图
3.数据收集与数据库介绍
2019年8月—2019年9月
收集查阅资料,并进行社会调查,确定系统需求
2019年9月—2019年10月
进行数据收集,获取并分析互联网上景点的相关信息
主要有三个wikivoyage数据的文件https://en.wikivoyage.org/
Wikivoyage 以 XML 格式提供了文章的数据转储:
wikivoyage-latest-pages-articles.xml
Wikivoyage中景点地理位置(https://dumps.wikimedia.org/enwikivoyage/latest/):
enwikivoyage-latest-geo_tags.sql
Wikivoyage中文章的信息:
enwikivoyage-latest-page.sql
wikivoyage_xml_to_json.py:
此文件的目的是将 Wikivoyage 旅行指南文章转换为 JSON 格式(获得wikivoyage.json)。Wikivoyage 以 XML 格式提供了文章的数据转储,我将其转换为 JSON 格式,以便用pandas进行探索性数据分析。
xmltodict
wikivoyage-latest-pages-articles.xml------->wikivoyage.json
wikivoyage_geotags_sql.py
此文件的目的是收集文章(地点)的地理位置。Wikivoyage 提供了文章的地理位置作为 sql 文件。我创建自己的 MySQL 数据库来加载和查询数据。我还在这个文件做了一些数据清理,删除口音等异常数据。
-->geotag_dict.pkl
SELECT p.page_id, p.page_title, p.page_len, g.gt_lat, g.gt_lon FROM geo_tags g JOIN page p(先放完整sql) |
titles that have concatenated names as the values.
San Francisco: San_Francisco
标准化连续化地点名称(normalize)方便将多词地名作为同一个值
scrap_wikivoyage_banners.py
此文件包含用于从 wikivoyage 中抓取文章的banner的代码。我也用这个来收集wikivoyage page的标准URL。我不得不在Wikivoyage上使用一个特殊的搜索页面搜索目的地,以克服地名中的微小语法差异
get_image_and_link
geotag_dict.pkl-------------> canonical wikivoyage url
search base url
-------------->img_path-->png
BeautifulSoup
--->geotag_imglink_wikibanner.pkl
(找到真实链接为https://en.wikivoyage.org/wiki/Fj%C3%A6rland)
数据库也放一下
(将以上信息可视化)
4.数据EDA
2019年8月—2019年9月
收集查阅资料,并进行社会调查,确定系统需求
2019年9月—2019年10月
进行数据收集,获取并分析互联网上景点的相关信息
2019年10月—2019年11月
进行探索性数据分析(EDA)和数据清理
Gensim在主题建模有出色的实现,然而挑战在于如何提取清晰,隔离,有意义的高质量主题。这在很大程度上取决于文本预处理的质量及找到最佳主题数量的策略。
EDA:
加载、清理、挑选数据作为word2vec的输入格式
word2vec的输入格式是句子列表,其中每个句子都表示为一个单词列表。
通过Ipython notebook已执行探索性数据分析和数据清理。Wikivoyage数据被加载、清理、挑选出来作为 word2vec 的输入格式,该格式是句子列表,其中每个句子都表示为单词列表。
wikivoyage.json
文章数据集中比较重要的是page->title、text
去除变音符号(diacritics)Title作为关键字存储页面
You can see that some articles are files, categories ,etc with : in their names.(特殊格式的文章)
Lets see how many of these there are.
two most common special type articles:MediaWiki& Wikivoyage
are not actual travel guide articles,remove
articles
MediaWiki& Wikivoyage—
check out the article lenghts
删除一地多名重定向文章(disambiguation articles)
删除文内特殊字符
convert_article_into_list_of_words
markdown(article)------------> article
mistune.
----------------> paragraph
BeautifulSoup
---------------> sentences
nltk.tokenize
---------------> list of words
Split
--------> wikivoyage_list_of_words.pkl
5.实现模型
2019年8月—2019年9月
收集查阅资料,并进行社会调查,确定系统需求
2019年9月—2019年10月
进行数据收集,获取并分析互联网上景点的相关信息
2019年10月—2019年11月
进行探索性数据分析(EDA)和数据清理
2019年11月—2019年12月
实现基于gensim 的 word2vec 模型,并编写矢量化用户搜索查询的函数
筛选实际地理位置的推荐,以geojson格式输出目的地的函数
Where2go基于谷歌创建的名为word2vec的模型。Word2vec 是一个神经网络,具有 1 个隐藏层,该层具有连续的单词袋 (CBOW) 或skip-grams实现。where2go 使用的版本使用skip-grams 和hierarchical softmax进行优化。
在高层级上,word2vec 试图训练神经网络,以参数化一个模型,该模型可以预测语料库中每个单词的周围单词。然后,这些预测用于回推和优化参数,使具有相似上下文的单词更紧密地联系在一起,同时远离具有不同上下文的单词。然后,使用输入隐藏层加权矩阵(也是单词的矢量表示形式)来深入了解单词的含义/相似性。
在我的model.py 文件中,我实现了 gensim 的 word2vec 模型,并编写了矢量化用户搜索查询的函数,和将建议筛选到实际地理位置、以geojson格式输出目的地的函数。
word2vec_model
gensim的主题建模
geotag_dict.pkl
wikivoyage_list_of_words.pkl
----------------------------->bigram(文档双词模型)
Genism.Phrases(min_count=10)
----------------------------> model_bigrams(?)
gensim.models.Word2Vec
--------> word2vec_model.pkl
------------>top_places(geojson.json)
most_similar
make_geo_marker
implement
拟合模型(fit word2vec model using gensim with upto trigrams)
wikivoyage_list(wikivoyage_list_of_words.pkl)
--------> bigram
Phrases
-------->trigrams
Phrases
-------->model_bigrams
Word2Vec
-------->init_sims(锁定模型)
parse_search_query:
query string--->term
+
----->multiplier
Word
----->vector
underscore*
normalize
-------->recommended sites
most_similar
6.模型展示与项目演示
2019年8月—2019年9月
收集查阅资料,并进行社会调查,确定系统需求
2019年9月—2019年10月
进行数据收集,获取并分析互联网上景点的相关信息
2019年10月—2019年11月
进行探索性数据分析(EDA)和数据清理
2019年11月—2019年12月
实现基于gensim 的 word2vec 模型,并编写矢量化用户搜索查询的函数
筛选实际地理位置的推荐,以geojson格式输出目的地的函数
2019年12月—2020年1月
设计实现Web 端应用程序,完成核心推荐模型在Web端的展示
模型在Web端的展示
我能够运行我自己的网站使用python Flask。我使用 javascript 对搜索引擎执行 AJAX 调用,以便可以在模型上运行用户的搜索查询,以预测最相似的位置并在地图上显示我的建议。Flask 文件名为"app.py",可在文件夹"webapp"中找到;"index.html"文件包含 html 和 javascript,可以在文件夹"模板"中找到。我用Bootstrap来设计我的网站。
搭建过程
request--->
post
---->
most_similar
---------------> top recommended(json)
wiki_url
img_path
gt_lat
gt_lon
截图:
相似地点推荐
地点、特征组合:
权重组合:
销量最好的葡萄酒之一是由纳帕谷百亩地酒庄酿造的纯金箔白葡萄酒。