当前位置: 当前位置:首页 > 百科 > 【DL】第4章 构建基于外向维基百科链接的推荐系统 正文

【DL】第4章 构建基于外向维基百科链接的推荐系统

2024-04-30 04:19:10 来源:口口声声网 作者:百科 点击:893次

【DL】第4章 构建基于外向维基百科链接的推荐系统

 🔎大家好,第章的推我是构建Sonhhxg_柒,希望你看完之后,基于荐系能对你有所帮助,外向维基不足请指正!百科共同学习交流🔎

📝个人主页-Sonhhxg_柒的链接博客_CSDN博客 📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​

📣系列专栏 - 机器学习【ML】 自然语言处理【NLP】  深度学习【DL】

 🖍foreword

✔说明⇢本人讲解主要包括Python、机器学习(ML)、第章的推深度学习(DL)、构建自然语言处理(NLP)等内容。基于荐系

如果你对这个系列感兴趣的外向维基话,可以关注订阅哟👋

推荐系统传统上是百科根据先前收集的用户评分进行训练的。我们想预测用户的链接评分,所以从历史评分开始感觉很自然。第章的推但是构建,这要求我们在开始之前拥有大量的基于荐系评级,并且它不允许我们在尚未评级的新项目上做得很好。此外,我们故意忽略我们在项目上拥有的元信息。

在本章中,您将探索如何构建一个简单的电影推荐系统,该系统仅基于传出的 Wikipedia 链接。您将从 Wikipedia 中提取训练集开始,然后根据这些链接训练嵌入。然后,您将实现一个简单的支持向量机分类器来提供建议。最后,您将探索如何使用新训练的嵌入来预测电影的评论分数。

本章中的代码可以在这些笔记本中找到:

04.1 从维基百科收集电影数据04.2 基于传出的维基百科链接构建推荐系统

4.1 收集数据

问题

您想要获取用于训练特定领域(如电影)的数据集。

解决方案

解析 Wikipedia 转储并仅提取电影页面。

笔记

本秘籍中的代码展示了如何从 Wikipedia 中获取和提取训练数据,这是一项非常有用的技能。但是,下载和处理完整转储需要相当长的时间。笔记本文件夹的数据目录包含我们将在本章剩余部分中使用的预提取的前 10,000 部电影,因此您无需运行本秘籍中的步骤。

让我们首先从 Wikipedia 下载最近的转储。您可以使用自己喜欢的浏览器轻松完成此操作,如果您不需要最新版本,您可能应该选择附近的镜子。但您也可以通过编程方式进行。以下是获取最新转储页面的方法:

index = requests.get('https://dumps.wikimedia.org/backup-index.html').textsoup_index = BeautifulSoup(index, 'html.parser')dumps = [a['href'] for a in soup_index.find_all('a')             if a.has_attr('href') and a.text[:-1].isdigit()]

我们现在将遍历转储并找到实际完成处理的最新转储:

for dump_url in sorted(dumps, reverse=True):    print(dump_url)    dump_html = index = requests.get(        'https://dumps.wikimedia.org/enwiki/' + dump_url).text    soup_dump = BeautifulSoup(dump_html, 'html.parser')    pages_xml = [a['href'] for a in soup_dump.find_all('a')                 if a.has_attr('href')                 and a['href'].endswith('-pages-articles.xml.bz2')]    if pages_xml:        break    time.sleep(0.8)

注意睡眠保持在维基百科的速率限制之下。现在让我们获取转储:

wikipedia_dump = pages_xml[0].rsplit('/')[-1]url = url = 'https://dumps.wikimedia.org/' + pages_xml[0]path = get_file(wikipedia_dump, url)path

我们检索到的转储是一个 bz2 压缩的 XML 文件。我们将使用它sax来解析 Wikipedia XML。我们对</code>和<code><page></code>标签感兴趣,所以我们<code>Content​Handler</code>看起来像这样:</p><pre><code>class WikiXmlHandler(xml.sax.handler.ContentHandler): def __init__(self): xml.sax.handler.ContentHandler.__init__(self) self._buffer = None self._values = {} self._movies = [] self._curent_tag = None def characters(self, content): if self._curent_tag: self._buffer.append(content) def startElement(self, name, attrs): if name in ('title', 'text'): self._curent_tag = name self._buffer = [] def endElement(self, name): if name == self._curent_tag: self._values[name] = ' '.join(self._buffer) if name == 'page': movie = process_article(**self._values) if movie: self._movies.append(movie)</code></pre><p style="margin-left:0;text-align:left;">对于每个<code><page></code>标签,这会将标题和文本的内容收集到<code>self._values</code>字典中,并<code>process_article</code>使用收集的值进行调用。</p><p style="margin-left:0;text-align:left;">尽管 Wikipedia 最初是一个基于超链接文本的百科全书,但多年来它已经发展成为一个更加结构化的数据转储。一种方法是让页面链接回所谓的<em>类别页面</em>。这些链接起到标签的作用。电影<em>《飞越杜鹃巢</em>》的页面链接到类别页面“1975 年的电影”,因此我们知道这是一部 1975 年的电影。不幸的是,没有电影类别页面这样的东西。幸运的是,有一个更好的方法:维基百科模板。</p><p style="margin-left:0;text-align:left;">模板最初是为了确保包含类似信息的页面以相同的方式呈现该信息。“信息框”模板对于数据处理非常有用。它不仅包含适用于页面主题的键/值对列表,而且还具有类型。其中一种类型是“电影”,这使得提取所有电影的任务变得更加容易。</p><p style="margin-left:0;text-align:left;">对于每部电影,我们要提取名称、传出链接以及存储在信息框中的属性,因为我们可以。恰当命名<code>mwparserfromhell</code>的解析维基百科做得不错:</p><pre><code>def process_article(title, text): rotten = [(re.findall('\d\d?\d?%', p), re.findall('\d\.\d\/\d+|$', p), p.lower().find('rotten tomatoes')) for p in text.split('\n\n')] rating = next(((perc[0], rating[0]) for perc, rating, idx in rotten if len(perc) == 1 and idx >-1), (None, None)) wikicode = mwparserfromhell.parse(text) film = next((template for template in wikicode.filter_templates() if template.name.strip().lower() == 'infobox film'), None) if film: properties = {param.name.strip_code().strip(): param.value.strip_code().strip() for param in film.params if param.value.strip_code().strip()} links = [x.title.strip_code().strip() for x in wikicode.filter_wikilinks()] return (title, properties, links) + rating</code></pre><p style="margin-left:0;text-align:left;">我们现在可以将 bzipped 转储输入解析器:</p><pre><code>parser = xml.sax.make_parser()handler = WikiXmlHandler()parser.setContentHandler(handler)for line in subprocess.Popen(['bzcat'], stdin=open(path), stdout=subprocess.PIPE).stdout: try: parser.feed(line) except StopIteration: break</code></pre><p style="margin-left:0;text-align:left;">最后,让我们保存结果,以便下次我们需要数据时,我们不必处理几个小时:</p><pre><code>with open('wp_movies.ndjson', 'wt') as fout: for movie in handler._movies: fout.write(json.dumps(movie) + '\n')</code></pre><h2 style="margin-left:0;text-align:left;">讨论</h2><p style="margin-left:0;text-align:left;">维基百科不仅是回答几乎所有人类知识领域问题的重要资源;它也是许多深度学习实验的起点。知道如何解析转储和提取相关位是对许多项目有用的技能。</p><p style="margin-left:0;text-align:left;">转储为 13 GB,下载量很大。解析 Wikipedia 标记语言有其自身的挑战:该语言多年来一直在有机地发展,并且似乎没有强大的底层设计。但是随着今天的快速连接和一些伟大的开源库来帮助解析,这一切都变得非常可行。</p><p style="margin-left:0;text-align:left;">在某些情况下,Wikipedia API 可能更合适。Wikipedia 的这个 REST 接口允许您以多种强大的方式进行搜索和查询,并且只获取您需要的文章。考虑到速率限制,以这种方式获取所有电影需要很长时间,但对于较小的域,这是一种选择。</p><p style="margin-left:0;text-align:left;">如果您最终为许多项目解析 Wikipedia,首先将转储导入 Postgres 之类的数据库可能是值得的,这样您就可以直接查询数据集。</p><h1 style="margin-left:0;text-align:left;">4.2 训练电影嵌入</h1><h2 style="margin-left:0;text-align:left;">问题</h2><p style="margin-left:0;text-align:left;">你如何使用实体之间的链接数据来产生诸如“如果你喜欢这个,你可能也对那个感兴趣”这样的建议?</p><h2 style="margin-left:0;text-align:left;">解决方案</h2><p style="margin-left:0;text-align:left;">使用一些元信息作为连接器来训练嵌入。这个秘籍通过使用从那里提取的电影和链接建立在前一个秘籍的基础上。为了使数据集更小,噪音更小,我们将只使用由维基百科上的受欢迎程度确定的前 10,000 部电影。</p><p style="margin-left:0;text-align:left;">我们将传出链接视为连接器。这里的直觉是链接到同一页面的电影是相似的。他们可能有相同的导演或相同的流派。随着模型的训练,它不仅知道哪些电影相似,还知道哪些链接相似。通过这种方式,它可以概括并发现指向 1978 年的链接与指向 1979 年的链接具有相似的含义,这反过来又有助于电影相似度。</p><p style="margin-left:0;text-align:left;">我们将从计算传出链接开始,以快速查看我们拥有的链接是否合理:</p><pre><code>link_counts = Counter()for movie in movies: link_counts.update(movie[2])link_counts.most_common(3)</code></pre><pre>[(u'Rotten Tomatoes', 9393), (u'Category:English-language films', 5882), (u'Category:American films', 5867)]</pre><p style="margin-left:0;text-align:left;">我们模型的任务是确定是否可以在电影的维基百科页面上找到某个链接,因此我们需要为其提供匹配和不匹配的标记示例。我们将仅保留至少出现 3 次的链接,并构建所有有效(链接、电影)对的列表,我们将存储这些列表以供以后快速查找。我们保持与集合相同的方便,以便以后快速查找:</p><pre><code>top_links = [link for link, c in link_counts.items() if c >= 3]link_to_idx = {link: idx for idx, link in enumerate(top_links)}movie_to_idx = {movie[0]: idx for idx, movie in enumerate(movies)}pairs = []for movie in movies: pairs.extend((link_to_idx[link], movie_to_idx[movie[0]]) for link in movie[2] if link in link_to_idx)pairs_set = set(pairs)</code></pre><p style="margin-left:0;text-align:left;">我们现在准备介绍我们的模型。示意性地,我们将 the<code>link_id</code>和 the<code>movie_id</code>作为一个数字,并将它们输入到它们各自的嵌入层中。嵌入层将为<code>embedding_size</code>每个可能的输入分配一个向量。然后我们将这两个向量的点积设置为我们模型的输出。该模型将学习权重,以使该点积接近标签。然后,这些权重会将电影和链接投影到一个空间中,以便相似的电影最终出现在相似的位置:</p><pre><code>def movie_embedding_model(embedding_size=30): link = Input(name='link', shape=(1,)) movie = Input(name='movie', shape=(1,)) link_embedding = Embedding(name='link_embedding', input_dim=len(top_links), output_dim=embedding_size)(link) movie_embedding = Embedding(name='movie_embedding', input_dim=len(movie_to_idx), output_dim=embedding_size)(movie) dot = Dot(name='dot_product', normalize=True, axes=2)( [link_embedding, movie_embedding]) merged = Reshape((1,))(dot) model = Model(inputs=[link, movie], outputs=[merged]) model.compile(optimizer='nadam', loss='mse') return modelmodel = movie_embedding_model()</code></pre><p style="margin-left:0;text-align:left;">我们将使用生成器为模型提供数据。生成器产生由正例和负例组成的批量数据。</p><p style="margin-left:0;text-align:left;">我们从对数组中采样正样本,然后用负样本填充它。负面示例是随机挑选的,我们确保它们不在<code>pairs_set</code>. 然后我们以我们的网络期望的格式返回数据,一个输入/输出元组:</p><pre><code>def batchifier(pairs, positive_samples=50, negative_ratio=5): batch_size = positive_samples * (1 + negative_ratio) batch = np.zeros((batch_size, 3)) while True: for idx, (link_id, movie_id) in enumerate( random.sample(pairs, positive_samples)): batch[idx, :] = (link_id, movie_id, 1) idx = positive_samples while idx < batch_size: movie_id = random.randrange(len(movie_to_idx)) link_id = random.randrange(len(top_links)) if not (link_id, movie_id) in pairs_set: batch[idx, :] = (link_id, movie_id, -1) idx += 1 np.random.shuffle(batch) yield {'link': batch[:, 0], 'movie': batch[:, 1]}, batch[:, 2]</code></pre><p style="margin-left:0;text-align:left;">训练模型的时间:</p><pre><code>positive_samples_per_batch=512model.fit_generator( batchifier(pairs, positive_samples=positive_samples_per_batch, negative_ratio=10), epochs=25, steps_per_epoch=len(pairs) // positive_samples_per_batch, verbose=2)</code></pre><p style="margin-left:0;text-align:left;">训练时间取决于你的硬件,但如果你从 10,000 部电影数据集开始,它们应该相当短,即使在没有 GPU 加速的笔记本电脑上也是如此。</p><p style="margin-left:0;text-align:left;">我们现在可以通过访问<code>movie_embedding</code>层的权重从我们的模型中提取电影嵌入。我们对它们进行归一化,以便我们可以使用点积作为余弦相似度的近似值:</p><pre><code>movie = model.get_layer('movie_embedding')movie_weights = movie.get_weights()[0]lens = np.linalg.norm(movie_weights, axis=1)normalized = (movie_weights.T / lens).T</code></pre><p style="margin-left:0;text-align:left;">现在让我们看看嵌入是否有意义:</p><pre><code>def neighbors(movie): dists = np.dot(normalized, normalized[movie_to_idx[movie]]) closest = np.argsort(dists)[-10:] for c in reversed(closest): print(c, movies[c][0], dists[c])neighbors('Rogue One')</code></pre><pre>29 Rogue One 0.99999993349 Star Wars: The Force Awakens 0.9722805101 Prometheus (2012 film) 0.9653338140 Star Trek Into Darkness 0.963534722 Jurassic World 0.96233625 Star Wars sequel trilogy 0.95218825659 Rise of the Planet of the Apes 0.951655762 Fantastic Beasts and Where to Find Them (film) 0.9466226742 The Avengers (2012 film) 0.9463437 Avatar (2009 film) 0.9460137</pre><h2 style="margin-left:0;text-align:left;">讨论</h2><p style="margin-left:0;text-align:left;">嵌入是一种有用的技术,而不仅仅是文字。在这个秘籍中,我们训练了一个简单的网络,并为电影生成了具有合理结果的嵌入。只要我们有办法连接项目,就可以应用这种技术。在这种情况下,我们使用了传出的 Wikipedia 链接,但我们也可以使用传入的链接或页面上出现的单词。</p><p style="margin-left:0;text-align:left;">我们在这里训练的模型非常简单。我们所做的只是要求它提出一个嵌入空间,这样电影的向量和链接的向量的组合就可以用来预测它们是否会同时出现。这迫使网络将电影投影到一个空间中,以使类似的电影最终出现在类似的位置。我们可以利用这个空间找到类似的电影。</p><p style="margin-left:0;text-align:left;">在 Word2vec 模型中,我们使用单词的上下文来预测单词。在这个秘籍的例子中,我们不使用链接的上下文。对于传出链接,它似乎不是一个特别有用的信号,但如果我们使用传入链接,它可能是有意义的。链接到电影的页面按特定顺序执行此操作,我们可以使用链接的上下文来改进我们的嵌入。</p><p style="margin-left:0;text-align:left;">或者,我们可以使用实际的 Word2vec 代码并在任何链接到电影的页面上运行它,但将电影链接保留为特殊标记。这将创建一个混合的电影和词嵌入空间。</p><h1 style="margin-left:0;text-align:left;">4.3 构建电影推荐器</h1><h2 style="margin-left:0;text-align:left;">问题</h2><p style="margin-left:0;text-align:left;">如何构建基于嵌入的推荐系统?</p><h2 style="margin-left:0;text-align:left;">解决方案</h2><p style="margin-left:0;text-align:left;">使用支持向量机将排名正的项目与排名负的项目分开。</p><p style="margin-left:0;text-align:left;">前面的食谱让我们对电影进行聚类并提出“如果你喜欢《<em>侠盗一号》</em>,你也应该看看《<em>星际穿越</em>》”之类的建议。在典型的推荐系统中,我们希望根据用户评分的一系列电影来显示建议。正如我们在第 3 章中所做的那样,我们可以使用 SVM 来做到这一点。让我们根据2015 年<em>滚石杂志</em>的最佳和最差电影,假装它们是用户评分:</p><pre><code>best = ['Star Wars: The Force Awakens', 'The Martian (film)', 'Tangerine (film)', 'Straight Outta Compton (film)', 'Brooklyn (film)', 'Carol (film)', 'Spotlight (film)']worst = ['American Ultra', 'The Cobbler (2014 film)', 'Entourage (film)', 'Fantastic Four (2015 film)', 'Get Hard', 'Hot Pursuit (2015 film)', 'Mortdecai (film)', 'Serena (2014 film)', 'Vacation (2015 film)']y = np.asarray([1 for _ in best] + [0 for _ in worst])X = np.asarray([normalized_movies[movie_to_idx[movie]] for movie in best + worst])</code></pre><p style="margin-left:0;text-align:left;">基于此构建和训练一个简单的 SVM 分类器很容易:</p><pre><code>clf = svm.SVC(kernel='linear')clf.fit(X, y)</code></pre><p style="margin-left:0;text-align:left;">我们现在可以对数据集中的所有电影运行新分类器,并打印出最好的五部电影和最差的五部电影:</p><pre><code>estimated_movie_ratings = clf.decision_function(normalized_movies)best = np.argsort(estimated_movie_ratings)print('best:')for c in reversed(best[-5:]): print(c, movies[c][0], estimated_movie_ratings[c])print('worst:')for c in best[:5]: print(c, movies[c][0], estimated_movie_ratings[c])</code></pre><pre>best:(6870, u'Goodbye to Language', 1.24075226186855)(6048, u'The Apu Trilogy', 1.2011876298842317)(481, u'The Devil Wears Prada (film)', 1.1759994747169913)(307, u'Les Mis\xe9rables (2012 film)', 1.1646775074857494)(2106, u'A Separation', 1.1483743944891462)worst:(7889, u'The Comebacks', -1.5175929012505527)(8837, u'The Santa Clause (film series)', -1.4651252650867073)(2518, u'The Hot Chick', -1.464982008376793)(6285, u'Employee of the Month (2006 film)', -1.4620595013243951)(7339, u'Club Dread', -1.4593221506016203)</pre><h2 style="margin-left:0;text-align:left;">讨论</h2><p style="margin-left:0;text-align:left;">正如我们在上一章中看到的,我们可以使用支持向量机来有效地构造一个区分两个类的分类器。在这种情况下,我们让它根据我们之前学习的嵌入来区分好电影和坏电影。</p><p style="margin-left:0;text-align:left;">由于 SVM 找到一个或多个将“好”示例与“坏”示例分开的超平面,我们可以将其用作个性化功能——离分离超平面最远且位于右侧的电影是应该是最喜欢的。</p><h1 style="margin-left:0;text-align:left;">4.4 预测简单电影属性</h1><h2 style="margin-left:0;text-align:left;">问题</h2><p style="margin-left:0;text-align:left;">您想要预测简单的电影属性,例如烂番茄评级。</p><h2 style="margin-left:0;text-align:left;">解决方案</h2><p style="margin-left:0;text-align:left;">对嵌入模型的学习向量使用线性回归模型来预测电影属性。</p><p style="margin-left:0;text-align:left;">让我们试试这个烂番茄评分。幸运的是,它们已经<code>movie[-2]</code>以字符串形式存在于我们的数据中<code><em>N</em>%</code>:</p><pre><code>rotten_y = np.asarray([float(movie[-2][:-1]) / 100 for movie in movies if movie[-2]])rotten_X = np.asarray([normalized_movies[movie_to_idx[movie[0]]] for movie in movies if movie[-2]])</code></pre><p style="margin-left:0;text-align:left;">这应该为我们提供大约一半电影的数据。让我们训练前 80%:</p><pre><code>TRAINING_CUT_OFF = int(len(rotten_X) * 0.8)regr = LinearRegression()regr.fit(rotten_X[:TRAINING_CUT_OFF], rotten_y[:TRAINING_CUT_OFF])</code></pre><p style="margin-left:0;text-align:left;">现在让我们看看我们在最后 20% 上的表现如何:</p><pre><code>error = (regr.predict(rotten_X[TRAINING_CUT_OFF:]) - rotten_y[TRAINING_CUT_OFF:])'mean square error %2.2f' % np.mean(error ** 2)</code></pre><pre>mean square error 0.06</pre><p style="margin-left:0;text-align:left;">这看起来真的很令人印象深刻!但是,虽然它证明了线性回归的有效性,但我们的数据存在一个问题,使预测烂番茄评分更容易:我们一直在对前 10,000 部电影进行训练,虽然流行电影并不总是更好,平均而言,他们确实获得了更好的收视率。</p><p style="margin-left:0;text-align:left;">通过将我们的预测与总是预测平均分进行比较,我们可以了解我们的表现如何:</p><pre><code>error = (np.mean(rotten_y[:TRAINING_CUT_OFF]) - rotten_y[TRAINING_CUT_OFF:])'mean square error %2.2f' % np.mean(error ** 2)</code></pre><p style="margin-left:0;text-align:left;">'mean square error 0.09'</p><p style="margin-left:0;text-align:left;">我们的模型确实表现得更好,但基础数据很容易产生合理的结果。</p><h2 style="margin-left:0;text-align:left;">讨论</h2><p style="margin-left:0;text-align:left;">复杂的问题往往需要复杂的解决方案,而深度学习绝对可以为我们提供这些。但是,从可能可行的最简单的事情开始通常是一个好方法。它让我们快速开始并让我们了解我们是否正在寻找正确的方向:如果简单模型根本没有产生任何有用的结果,那么复杂模型不太可能有帮助,而如果简单模型确实有效,一个更复杂的模型很有可能帮助我们获得更好的结果。</p><p style="margin-left:0;text-align:left;">线性回归模型非常简单。该模型试图找到一组因素,使这些因素和我们的向量的线性组合尽可能接近目标值。与大多数机器学习模型相比,这些模型的一个很好的方面是我们实际上可以看到每个因素的贡献是什么.</p> <div class="endmore">作者:综合 </div> </div> <div class="dede_pages"> <ul class="pagelist"> <a href="https://www.ssgouwu.com/yule/">娱乐</a><a href="https://www.ssgouwu.com/zonghe/">综合</a><a href="https://www.ssgouwu.com/baike/">百科</a><a href="https://www.ssgouwu.com/shishang/">时尚</a><a href="https://www.ssgouwu.com/xiuxian/">休闲</a><a href="https://www.ssgouwu.com/zhishi/">知识</a><a href="https://www.ssgouwu.com/tansuo/">探索</a><a href="https://www.ssgouwu.com/jiaodian/">焦点</a><a href="https://www.ssgouwu.com/redian/">热点</a> </ul> </div> <div class="boxoff"> <strong>------分隔线----------------------------</strong> </div> </div> </div> <div class="pright"> <div> <dl class="tbox"> <dt><strong>头条新闻</strong></dt> <dd> <ul class="c1"> <li ><a href="http://z.z.z.ssgouwu.com/news/422b599572.html">三国志战略版憋7本玩法攻略 速7本爆仓技巧一览</a></li> <li ><a href="http://777lll7777.ssgouwu.com/html/749f598787.html">冬拥湖怎么打(冬拥湖怎么打生命)</a></li> <li ><a href="http://l-l-l.ssgouwu.com/html/530f599006.html">两女一马(两女一男什么字怎么读)</a></li> <li ><a href="http://5-55-5-5-5-5.ssgouwu.com/html/700f598836.html">cf没有声音(cf端游没有声音)</a></li> <li ><a href="http://e.ssgouwu.com/html/273a599721.html">魔力宝贝正版手游下载排行榜</a></li> <li ><a href="http://z-z.222a.ssgouwu.com/news/921e598615.html">女鬼加点(女鬼怎么提升伤害)</a></li> <li ><a href="http://ll1l-1.11.ssgouwu.com/html/584c598952.html">dnf打不开(dnf打不开是怎么回事)</a></li> <li ><a href="http://z-z-zz-z-z-z.ssgouwu.com/html/986d598550.html">植物僵尸2修改器(植物僵尸修改器3.1)</a></li> <li ><a href="http://9t9t9t9t.ssgouwu.com/html/16b599978.html">青云ComMax串口通讯软件</a></li> <li ><a href="http://n.ssgouwu.com/news/701f598835.html">飞升坐骑(飞升坐骑升阶数据2022)</a></li> </ul> </dd> </dl> <dl class="tbox"> <dt><strong>图片新闻</strong></dt> <dd> <ul class="e9"> <li ><a href="https://www.ssgouwu.com/news/164b599830.html"><img src="/autopic/J09ZKIibgLGbed9qVBF4vrJoiGR.jpg" alt=""/><span class="title">[OL][资讯] 三国杀校园行四月新1v1比赛 硝烟再起!</span></a></li> <li ><a href="https://www.ssgouwu.com/html/57b599479.html"><img src="/autopic/5LPc5nJm5oz96n2PZhvOwBF4zvwytXaycoCyho0k.jpg" alt=""/><span class="title">倩女幽魂2职业(倩女幽魂2职业附体要多少级家园装备)</span></a></li> <li ><a href="https://www.ssgouwu.com/html/231b599305.html"><img src="/autopic/5ehO5orr5n_F5LTU5cr26Mr0ZwNlZltk.jpg" alt=""/><span class="title">滁州寒假时间2023(2020滁州市中小学寒假时间)</span></a></li> <li ><a href="https://www.ssgouwu.com/html/579e598957.html"><img src="/autopic/5YlX5Lvc5Yv555dR5d2z5MzbXBF8vhJVdrF4hrrnuQR.jpg" alt=""/><span class="title">伊利丹的武器(伊利丹的武器怎么来的)</span></a></li> </ul> </dd> </dl> <dl class="tbox"> <dt><strong>新闻排行榜</strong></dt> <dd> <ul class="r1"> </ul> </dd> </dl> </div> </div> </div> <div class="flink w960 center clear"> <dl class="tbox"> <dt> <strong>友情链接</strong> </dt> <dd> <ul class="f4"><a href="http://jjjj2.ssgouwu.com/html/593d598943.html" target="_blank">自驾游是选西藏还是新疆,有好的建议嘛?</a>  <a href="http://r-r-r-r.twqueen.com/html/80e599456.html" target="_blank">如何能在两个月内减掉15斤体重?</a>  <a href="http://j-4.uu.jslxdlkj.com/html/085f599451.html" target="_blank">俄罗斯正在研制的S-500“普鲁米修斯”防空反导系统性能如何?</a>  <a href="http://k.3gmoqi.com/html/116a599420.html" target="_blank">给抑郁症患者10个亿,他们还会抑郁吗?</a>  <a href="http://k-kkk-888.8.twittercn.com/html/299f599237.html" target="_blank">魔兽现在没人玩了吗?</a>  <a href="http://1-1-1.qwdzh.com/html/789c598747.html" target="_blank">狸花猫的野性有多大?</a>  <a href="http://4i.4i-ii.lxdlkj.com/html/458b599078.html" target="_blank">穿九分裤的时候,如何搭配鞋子?</a>  <a href="http://y-jj.j5.52pjz.com/html/745f598791.html" target="_blank">生活中,哪些人情世故中的细节可以看出一个人的情商高?</a>  <a href="http://1.ssgouwu.com/html/063a599473.html" target="_blank">40多岁生二胎的妈妈们,现在是后悔还是庆幸?</a>  <a href="http://q.twqueen.com/news/446e599090.html" target="_blank">有人说水门战力远逊色初代,那么猿飞很惧怕四代的棺材吗?</a>  <a href="http://d.d.d.jslxdlkj.com/news/931c598605.html" target="_blank">打算创业加盟,现在哪些加盟行业比较好?</a>  <a href="http://v.v77.vv.3gmoqi.com/html/308e599228.html" target="_blank">大腿冰凉什么原因?</a>  <a href="http://l.twittercn.com/news/545e598991.html" target="_blank">有哪些设计简单上身有气质的女装品牌?</a>  <a href="http://f1f1f11.qwdzh.com/html/557e598979.html" target="_blank">我一朋友人品特别好就是穷点,结婚四个月离了,没领证,为什么给介绍的都是离婚的?</a>  <a href="http://2-q.2q-qq.lxdlkj.com/news/967a598569.html" target="_blank">外省人如何看待江苏省?</a>  <a href="http://c-c-c-c.52pjz.com/news/416b599120.html" target="_blank">90年还没结婚,最近相亲又失败了,爸爸妈妈整天气的吃不下饭导致心里非常自卑怎么办?</a>  <a href="http://k.k.k.ssgouwu.com/news/141d599395.html" target="_blank">在智联招聘上看到有跟车员岗位8000~12000,靠谱吗?</a>  <a href="http://rrrrr10.twqueen.com/html/340c599196.html" target="_blank">生活中你遇到的哪些事情让你觉得90后可以独当一面了?</a>  <a href="http://s.jslxdlkj.com/news/063a599473.html" target="_blank">如何评价乒乓球运动员江嘉良?</a>  <a href="http://xxxx666.3gmoqi.com/news/571c598965.html" target="_blank">50岁左右的中年男人,每天应该如何运动健身?</a>  <a href="http://e.twittercn.com/news/994f598542.html" target="_blank">中国真实失业率是多少?</a>  <a href="http://mm11.qwdzh.com/html/957b598579.html" target="_blank">如何选择正确的Web编程语言?</a>  <a href="http://llll66.lxdlkj.com/news/900f598636.html" target="_blank">你见过最奇怪的事,是什么事?</a>  <a href="http://777aa7.52pjz.com/html/976b598560.html" target="_blank">我侄子今年才初三,每个星期就要500生活费,过分吗?</a>  <a href="http://444rrr4444.ssgouwu.com/html/325f599211.html" target="_blank">离婚很痛苦吗?</a>  <a href="http://uuu-uuu.twqueen.com/html/705c598831.html" target="_blank">如何有效遛猫?</a>  <a href="http://999bbb9999.jslxdlkj.com/news/441d599095.html" target="_blank">人到中年要不要认真打扮自己?</a>  <a href="http://3-h3h3h-3h.3gmoqi.com/html/420b599116.html" target="_blank">每天走一万步真的能减肥吗?</a>  <a href="http://9.twittercn.com/html/009b599527.html" target="_blank">什么品牌鞋子好看?</a>  <a href="http://3u.3u-uu.qwdzh.com/news/499a599037.html" target="_blank">现在越来越多的人相信中医,怎么看待西医跟中医的区别?</a>  <a href="http://s-sss-333.3.lxdlkj.com/html/236e599300.html" target="_blank">在胃癌的所有前兆中,哪个最特别?</a>  <a href="http://7-77-7-7-7-7.52pjz.com/news/953f598583.html" target="_blank">中国哪个地方买日系车的比较多?为什么?</a>  <a href="http://4-4-4.ssgouwu.com/html/782f598754.html" target="_blank">天人合一是何境界?</a>  <a href="http://iiii.twqueen.com/html/425b599111.html" target="_blank">夏天高温天气,出门了,会给家里的猫猫狗狗开空调吗?</a>  <a href="http://nnn555.jslxdlkj.com/news/902d598634.html" target="_blank">在《博人传》里又出现了一个超强的忍术,有人说其威力堪比天照,对此你怎么看?</a>  <a href="http://5ul.3gmoqi.com/news/459a599077.html" target="_blank">明明原著火爆内容很精彩,被改编成影视剧却扑街的作品有哪些?</a>  <a href="http://n.n22.nn.twittercn.com/html/776d598760.html" target="_blank">华山九功分别指的是什么,为什么说紫霞第一?</a>  <a href="http://4.qwdzh.com/news/215a599321.html" target="_blank">外墙渗水,物业说上报住建委,可三个月还没修,可以不交物业费吗?</a>  <a href="http://u3u3u3u3.lxdlkj.com/html/449f599087.html" target="_blank">当领导的格局是什么?</a>  <a href="http://a-a-aaag.52pjz.com/html/36d599500.html" target="_blank">片区的公立学校一般,私立学校一年3万多,应该送孩子去哪个?</a>   </ul> <ul class="f5"> </ul> </dd> </dl> </div> <div class="footer w960 center mt1 clear"> <div class="fmr"> <div class="copyright">本站部分资料来源于互联网转载和网友发布,如侵犯您的权益,请联系我站客服,我们将尽快处理,谢谢合作! <br> Copyright © 2024 Powered by <a href="https://www.ssgouwu.com/news/26e599891.html">【DL】第4章 构建基于外向维基百科链接的推荐系统</a>,<a href="https://www.ssgouwu.com/">口口声声网</a>   <a href="http://www.ssgouwu.com/sitemap.xml">sitemap</a></div> <div class="pic"><img src="https://www.ssgouwu.com/template/news/news01/images/foot_beian.gif" alt=""><img src="https://www.ssgouwu.com/template/news/news01/images/foot_jubao.gif"><img src="https://www.ssgouwu.com/template/news/news01/images/foot_wljc.gif"><img src="https://www.ssgouwu.com/template/news/news01/images/foot_wm.gif"><img src="https://www.ssgouwu.com/template/news/news01/images/foot_110.gif"> </div> </div> </div> </body> </html>