使用机器学习和Flask构建人工智能购物助理

239 阅读3分钟

image.png

简介

购物可能是一个耗时的过程,但随着人工智能(AI)的出现,这个过程可以变得更容易和更有效。在本教程中,我们将使用机器学习(ML)和Flask建立一个人工智能购物助手。我们将使用自然语言处理(NLP)和推荐系统来提高用户的购物体验。

先决条件

  • Python的基本知识
  • 熟悉Flask
  • 了解NLP和推荐系统

设置环境

首先,我们需要为我们的项目建立一个虚拟环境。这可以用下面的命令来完成:

python -m venv shopping-assistant

一旦环境设置好了,用下面的命令激活它:

source shopping-assistant/bin/activate

安装依赖项:我们将为我们的项目使用几个依赖项。你可以用下面的命令来安装它们:

pip install Flask Flask-Cors Flask-RESTful nltk numpy pandas scikit-learn tensorflow

建立数据集

我们需要一个产品及其描述的数据集来训练我们的ML模型。我们可以使用Kaggle的数据集或从电子商务网站上搜刮数据。在本教程中,我们将使用Kaggle的产品数据集。你可以使用以下命令下载它:

wget https://storage.googleapis.com/kaggle-data-sets/1706/2856226/compressed/Womens%20Clothing%20E-Commerce%20Reviews.csv.zip?X-Goog-Algorithm=GOOG4-RSA-SHA256&X-Goog-Credential=databricks-1%40db-saas-bd0088a7452e.iam.gserviceaccount.com%2F20220329%2Fauto%2Fstorage%2Fgoog4_request&X-Goog-Date=20220329T134303Z&X-Goog-Expires=172799&X-Goog-SignedHeaders=host&X-Goog-Signature=4a4b4d1b8ad4e661a4be17045b0f2eac4978eeeb98ed35fcf771daea28ec42cc3e32f93077b0ebd742a9f9d901f413188e32b45c297dcce3240b693c8f0a2d1d9db1fa9e9c8ca74f522a91d802ce29a509a2578c61aa2a1f60c56489d2f9a78e40723eb6f524dfe06d424cc3c3af03a912116b5c7b5f5f8bb7f57d1383a94b59f52b4ad8cf78a4a35d20bdf0389b9e8dc4722f6b50ee20ed558729d8328c7e18e55d5b5c5b5f7f3ce6e57d58c4e6d4ed7c8ad6b5bcfb820dced9ee26d7c8bb1bc2af1d85c104fdebe00f38446b6cf178dbdcd05e9debf54bc8f70bba10974e21c745b00d7bb8c38e2fbb0e77ac9f
unzip Womens Clothing E-Commerce Reviews.csv.zip

创建ML模型

我们将为我们的ML模型使用一个基于内容的推荐系统。这个系统根据用户以前与类似产品的互动来推荐产品。为此,我们将使用术语频率-逆向文档频率(TF-IDF)算法。该算法计算产品描述中每个词的重要性,并给它加权。

我们将使用 sci-kit-learn 的 TfidfVectorizer 来实现 TF-IDF 算法。我们可以使用以下代码创建ML模型:

import pandas as pdfrom sklearn.feature_extraction.text import TfidfVectorizerfrom sklearn.metrics.pairwise import cosine_similarity# load datasetdf = pd.read_csv('Womens Clothing E-Commerce Reviews.csv')# remove null valuesdf.dropna(subset=['Description'], inplace=True)# create TF-IDF matrixtfidf = TfidfVectorizer(stop_words='english')tfidf_matrix = tfidf.fit_transform(df['Description'])# compute cosine similaritycosine_sim = cosine_similarity(tfidf_matrix, tfidf_matrix)

创建Flask应用程序

现在我们的ML模型已经准备好了,我们可以创建一个Flask应用来处理用户请求并返回产品推荐。我们将创建一个简单的RESTful API,有两个端点:/search/recommend

/search 端点接受一个查询参数,并返回一个符合查询的产品列表。我们将使用NLTK的word_tokenize和stopwords模块来预处理用户的查询,然后再搜索产品描述中的匹配信息。

/recommend 端点将产品ID作为输入,并根据我们的ML模型返回一个类似产品的列表。我们将使用之前计算的余弦相似度矩阵来寻找类似产品。

下面是我们的Flask应用的代码:

from flask import Flask, request, jsonifyfrom flask_cors import CORSfrom flask_restful import Resource, Apiimport nltkfrom nltk.tokenize import word_tokenizefrom nltk.corpus import stopwords# initialize appapp = Flask(__name__)CORS(app)api = Api(app)# search endpointclass Search(Resource):    def get(self):        query = request.args.get('query')        # preprocess query        tokens = word_tokenize(query.lower())        tokens = [token for token in tokens if token.isalpha()]        tokens = [token for token in tokens if token not in stopwords.words('english')]        # search for matches in product descriptions        matches = df[df['Description'].str.contains('|'.join(tokens))]        # return list of matches        return jsonify(matches.to_dict(orient='records'))# recommend endpointclass Recommend(Resource):    def get(self):        product_id = request.args.get('id')        # find similar products        index = df[df['Clothing ID'] == int(product_id)].index[0]        sim_scores = list(enumerate(cosine_sim[index]))        sim_scores = sorted(sim_scores, key=lambda x: x[1], reverse=True)        sim_scores = sim_scores[1:6]        product_indices = [i[0] for i in sim_scores]        # return list of similar products        return jsonify(df.iloc[product_indices].to_dict(orient='records'))# add resources to apiapi.add_resource(Search, '/search')api.add_resource(Recommend, '/recommend')if __name__ == '__main__':    app.run(debug=True)

结论

在本教程中,我们使用机器学习和Flask建立了一个人工智能购物助理。我们使用自然语言处理和推荐系统来增强用户的购物体验。通过这个助手,用户可以搜索产品,并根据他们以前与类似产品的互动获得推荐。这个项目可以扩展到包括更多的功能,如情感。