如何使用从网站抓取的数据到 Word2vec Gensim
How to use scraped data from website to Word2vec Gensim
我对 MySQL、Gensim 和 Word2Vec 还很陌生,我仍在通过个人项目学习如何使用。
我有通过网络抓取获得的数据,因此它不是硬编码的。
(我使用 Instagram 帐户从几个 post 获取主题标签数据,所以我的数据是
Instagram 标签)
我正在尝试在下面的代码中使用该数据:
import pymysql.cursors
import re
from gensim.models import Word2Vec
# Connect to the database
connection = pymysql.connect(host=secrets[0],
user=username,
password=password,
db='test',
charset='charsetExample',
cursorclass=pymysql.cursors.DictCursor)
try:
# connection to database
with connection.cursor() as cursor:
# cursor is iterator / 'Select' - caption is column
# post is the table
cursor.execute("SELECT caption FROM posts LIMIT 1000")
data = cursor.fetchall()
# list of captions
captions = [d['caption'].lower() for d in data]
# hashtags = [re.findall(r"#([A-Za-z_0-9]+)", caption) for caption in captions]
# hashtags = [hashtag for hashtag in hashtags if hashtag != []]
model = Word2Vec(captions, min_count=1)
model = Word2Vec(hashtags)
res = model.wv.most_similar("fitness")
print(captions)
print(res)
finally:
connection.close()
这是我正在处理的部分,但不确定该怎么做:
res = model.wv.most_similar("fitness")
现在我正在尝试使用 most_similar()
方法来查看它是如何工作的。
我想做的是 most_similar("value")
我想使用我的数据
这将是我通过抓取 Instagram 网站获得的每个主题标签作为值。
谢谢!
好的,所以,你必须自己训练word2vec模型。您需要做的是确保您的主题标签实际上没有 #
符号和小写字母。
现在,将主题标签按 post 分组。因此,如果某些 post 有标签 #red
、#Wine
、#party
,您应该从中创建一个列表,如下所示:[red, wine, party]
。对每个 post 重复此操作,并将每个 post 的列表保存到新列表中。所以这个输出应该是列表列表:[[red, wine, party], [post_2_hashtags], ...]
。现在您可以将其输入到 word2vec 模型并使用此行对其进行训练:
model = gensim.models.Word2Vec(
documents,
size=150,
window=10,
min_count=2,
workers=10)
model.train(documents, total_examples=len(documents), epochs=10)
model.save("word2vec.model")
documents
是上一步创建的列表列表。然后您可以使用 model = gensim.models.Word2Vec.load("word2vec.model")
加载模型。其余的都是一样的。您仍然使用 most_similar()
方法来获取最相似的词(在本例中为主题标签)。
您唯一需要注意的是矢量大小(word2vec.model
中的size
参数)。你在训练前定义它。如果你有很多数据,你就把它设置得更大一些,如果你有更少的数据量,就把它设置得更小一些。但这是您必须弄清楚的事情,因为您是唯一可以查看您拥有的数据的人。尝试使用 size
参数并使用 most_similar()
方法评估模型。
我希望这已经够清楚了:)
我对 MySQL、Gensim 和 Word2Vec 还很陌生,我仍在通过个人项目学习如何使用。
我有通过网络抓取获得的数据,因此它不是硬编码的。 (我使用 Instagram 帐户从几个 post 获取主题标签数据,所以我的数据是 Instagram 标签)
我正在尝试在下面的代码中使用该数据:
import pymysql.cursors
import re
from gensim.models import Word2Vec
# Connect to the database
connection = pymysql.connect(host=secrets[0],
user=username,
password=password,
db='test',
charset='charsetExample',
cursorclass=pymysql.cursors.DictCursor)
try:
# connection to database
with connection.cursor() as cursor:
# cursor is iterator / 'Select' - caption is column
# post is the table
cursor.execute("SELECT caption FROM posts LIMIT 1000")
data = cursor.fetchall()
# list of captions
captions = [d['caption'].lower() for d in data]
# hashtags = [re.findall(r"#([A-Za-z_0-9]+)", caption) for caption in captions]
# hashtags = [hashtag for hashtag in hashtags if hashtag != []]
model = Word2Vec(captions, min_count=1)
model = Word2Vec(hashtags)
res = model.wv.most_similar("fitness")
print(captions)
print(res)
finally:
connection.close()
这是我正在处理的部分,但不确定该怎么做:
res = model.wv.most_similar("fitness")
现在我正在尝试使用 most_similar()
方法来查看它是如何工作的。
我想做的是 most_similar("value")
我想使用我的数据
这将是我通过抓取 Instagram 网站获得的每个主题标签作为值。
谢谢!
好的,所以,你必须自己训练word2vec模型。您需要做的是确保您的主题标签实际上没有 #
符号和小写字母。
现在,将主题标签按 post 分组。因此,如果某些 post 有标签 #red
、#Wine
、#party
,您应该从中创建一个列表,如下所示:[red, wine, party]
。对每个 post 重复此操作,并将每个 post 的列表保存到新列表中。所以这个输出应该是列表列表:[[red, wine, party], [post_2_hashtags], ...]
。现在您可以将其输入到 word2vec 模型并使用此行对其进行训练:
model = gensim.models.Word2Vec(
documents,
size=150,
window=10,
min_count=2,
workers=10)
model.train(documents, total_examples=len(documents), epochs=10)
model.save("word2vec.model")
documents
是上一步创建的列表列表。然后您可以使用 model = gensim.models.Word2Vec.load("word2vec.model")
加载模型。其余的都是一样的。您仍然使用 most_similar()
方法来获取最相似的词(在本例中为主题标签)。
您唯一需要注意的是矢量大小(word2vec.model
中的size
参数)。你在训练前定义它。如果你有很多数据,你就把它设置得更大一些,如果你有更少的数据量,就把它设置得更小一些。但这是您必须弄清楚的事情,因为您是唯一可以查看您拥有的数据的人。尝试使用 size
参数并使用 most_similar()
方法评估模型。
我希望这已经够清楚了:)