日韩精品一区二区三区在线视频放-无码中文字幕V?一区二区-成年片免费观看视频-国内少妇人妻丰满av-国产精品中文字幕免费观看-亚洲成人久久一区二区三区-国内少妇偷人精品视频无缓冲-一区二区国产精品日本一区二区三区在线网

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線實(shí)戰(zhàn)洞察。

基于協(xié)同過(guò)濾的Python音樂(lè)推薦系統(tǒng)實(shí)現(xiàn)與工程落地

基于協(xié)同過(guò)濾的Python音樂(lè)推薦系統(tǒng)實(shí)現(xiàn)與工程落地 很多做 Python 畢業(yè)設(shè)計(jì)的同學(xué)看到“推薦系統(tǒng)”四個(gè)字第一反應(yīng)是先去找算法公式第二反應(yīng)是擔(dān)心“數(shù)學(xué)不好能不能做”。實(shí)際上畢設(shè)里的推薦系統(tǒng)并沒(méi)有那么神秘。它最核心的協(xié)同過(guò)濾思想翻譯成大白話就是一句話把跟你口味相似的人喜歡的歌推薦給你或者把你平時(shí)聽(tīng)過(guò)的歌的“同類歌”推薦給你。這個(gè)課題能在本科畢設(shè)里持續(xù)熱門(mén)原因是它天然具備“算法有亮點(diǎn)、工程可落地、界面能展示、論文有素材”四個(gè)特點(diǎn)。你可以用 Python 獨(dú)立完成后端推薦引擎用 Django 暴露接口再用 Vue 做前端頁(yè)面。整個(gè)過(guò)程沒(méi)有一項(xiàng)技術(shù)是超綱的但它合成的效果卻足以撐起一份完整的畢設(shè)項(xiàng)目。這篇文章會(huì)把整個(gè)系統(tǒng)從零到一拆開(kāi)講重點(diǎn)解決三類問(wèn)題協(xié)同過(guò)濾到底是什么在音樂(lè)場(chǎng)景里應(yīng)該怎么建模Django 如何描述用戶、歌曲和評(píng)分行為算法如何寫(xiě)進(jìn)業(yè)務(wù)代碼Vue 前端如何把“為你推薦”變成可點(diǎn)擊、可播放、可收藏的真實(shí)頁(yè)面。內(nèi)容末尾還整理了常見(jiàn)異常和答辯高頻問(wèn)題方便直接對(duì)照復(fù)盤(pán)。1. 先想清楚一件事你做的不是算法 Demo而是一個(gè)系統(tǒng)很多人做畢設(shè)容易走偏花兩周調(diào)一個(gè) Python 腳本打印出幾個(gè)相似度數(shù)字就以為推薦系統(tǒng)做完了。但答辯時(shí)老師看重的往往不是你的相似度公式寫(xiě)得多細(xì)而是你有沒(méi)有把推薦這個(gè)動(dòng)作完整放進(jìn)業(yè)務(wù)流程里。推薦系統(tǒng)在真實(shí)產(chǎn)品中應(yīng)該具備三塊聯(lián)動(dòng)能力行為采集用戶收藏了哪首歌、聽(tīng)了多少秒、是否評(píng)分。沒(méi)有行為數(shù)據(jù)算法就是無(wú)源之水。算法計(jì)算維護(hù)一張“用戶-歌曲-評(píng)分”關(guān)系表并在此基礎(chǔ)上完成相似度計(jì)算和 TopN 排序。前端觸達(dá)推薦結(jié)果最終要出現(xiàn)在頁(yè)面里以列表形式呈現(xiàn)比如“猜你喜歡”“相似歌曲”。論文里可以寫(xiě)“本系統(tǒng)基于協(xié)同過(guò)濾算法實(shí)現(xiàn)個(gè)性化推薦”但工程里真正要落地的是上面這串完整鏈路。接下來(lái)的內(nèi)容會(huì)以這個(gè)鏈路為主線展開(kāi)。1.1 這個(gè)系統(tǒng)的技術(shù)選型為什么是 Django Vue先用一句話總結(jié)結(jié)論Django 負(fù)責(zé)把“數(shù)據(jù)模型、推薦計(jì)算、API 接口”包成后端服務(wù)Vue 負(fù)責(zé)把后端計(jì)算結(jié)果渲染成用戶能看懂的界面。這個(gè)組合在本科畢設(shè)里流行有三個(gè)直接原因Django 自帶 ORM 和 Admin 后臺(tái)建表、加數(shù)據(jù)、管理歌曲不需要額外開(kāi)發(fā)一套后臺(tái)頁(yè)面Django REST Framework 可以快速把 Python 對(duì)象轉(zhuǎn)換成 JSON 接口剛好喂給前端Vue 單頁(yè)組件寫(xiě)法直觀用來(lái)做“播放器 推薦列表 收藏按鈕”這類交互開(kāi)發(fā)量可控。數(shù)據(jù)庫(kù)方面如果是在本機(jī)演示使用 Django 默認(rèn)的 SQLite 即可。SQLite 單文件部署對(duì)畢設(shè)最友好。如果導(dǎo)師明確要求“必須使用 MySQL”你只需要在項(xiàng)目中替換DATABASES配置然后重新執(zhí)行遷移命令模型層代碼不需要大改。2. 基礎(chǔ)概念協(xié)同過(guò)濾的兩種核心玩法在寫(xiě)代碼之前需要用“場(chǎng)景化”的方式把協(xié)同過(guò)濾講明白。如果你答辯時(shí)能用自己的話復(fù)述這個(gè)東西老師基本不會(huì)再刁難。2.1 基于用戶的協(xié)同過(guò)濾User-Based CF假設(shè)用戶 A 喜歡《晴天》《七里香》《夜曲》用戶 B 喜歡《晴天》《七里香》《以父之名》系統(tǒng)會(huì)認(rèn)為 A 和 B 的聽(tīng)歌口味高度相似于是把 B 聽(tīng)過(guò)的《以父之名》推給 A。這種玩法更關(guān)心“人與人之間的關(guān)系”適合社交屬性強(qiáng)、用戶量中等的場(chǎng)景。缺點(diǎn)是系統(tǒng)剛上線時(shí)用戶行為太少很難找到相似用戶也就是常說(shuō)的冷啟動(dòng)問(wèn)題。2.2 基于物品的協(xié)同過(guò)濾Item-Based CF假設(shè)你在聽(tīng)《七里香》系統(tǒng)發(fā)現(xiàn)聽(tīng)過(guò)《七里香》的人有很大概率也收藏了《簡(jiǎn)單愛(ài)》于是把《簡(jiǎn)單愛(ài)》推薦給你。它不關(guān)心你和別人像不像它關(guān)心歌曲與歌曲之間被同時(shí)消費(fèi)的關(guān)聯(lián)性更適合網(wǎng)易云音樂(lè)、QQ 音樂(lè)這類曲庫(kù)相對(duì)穩(wěn)定的產(chǎn)品。在實(shí)際項(xiàng)目中更穩(wěn)的做法是同時(shí)實(shí)現(xiàn)這兩種算法然后在 API 層留一個(gè)參數(shù)指定當(dāng)前走哪套策略。這樣不僅論文里能多寫(xiě)一個(gè)對(duì)比分析點(diǎn)答辯時(shí)也會(huì)有更多可以講的內(nèi)容。3. 環(huán)境準(zhǔn)備與前置條件下面這組環(huán)境清單按當(dāng)前主流適配情況整理。具體到某個(gè)同學(xué)的機(jī)器版本可能略有差異但這組配置基本可以穩(wěn)定跑通。依賴版本建議用途說(shuō)明Python3.10推薦算法與 Django 運(yùn)行環(huán)境Django4.x LTSWeb 后端框架djangorestframework3.14快速生成 JSON APIdjango-cors-headers4.x解決前后端分離的跨域問(wèn)題Vue CLI / ViteVue 3.x前端開(kāi)發(fā)工具鏈Node.js18前端腳手架運(yùn)行環(huán)境SQLiteDjango 內(nèi)置本地默認(rèn)數(shù)據(jù)庫(kù)如果還沒(méi)裝 Python建議先確認(rèn) Python 能正常執(zhí)行python --version pip --version然后在虛擬環(huán)境中安裝后端依賴mkdir music-recommend cd music-recommend python -m venv venv source venv/bin/activate # Windows 下執(zhí)行 venv\Scripts\activate pip install django djangorestframework django-cors-headers安裝完成后創(chuàng)建 Django 項(xiàng)目django-admin startproject config . python manage.py startapp music python manage.py startapp recommend項(xiàng)目結(jié)構(gòu)初步規(guī)劃如下music-recommend/ ├── config/ # Django 主配置 │ ├── settings.py │ └── urls.py ├── music/ # 歌曲與用戶行為模塊 │ ├── models.py │ └── views.py ├── recommend/ # 推薦算法模塊 │ ├── utils.py │ └── views.py ├── manage.py └── db.sqlite3 # 默認(rèn)數(shù)據(jù)庫(kù)文件接下來(lái)把music和recommend兩個(gè)應(yīng)用注冊(cè)到INSTALLED_APPS中。然后在全局路由里配置 API 前綴# config/urls.py from django.contrib import admin from django.urls import path, include urlpatterns [ path(admin/, admin.site.urls), path(api/music/, include(music.urls)), path(api/recommend/, include(recommend.urls)), ]這樣設(shè)計(jì)的好處是后端業(yè)務(wù)按模塊拆分推薦算法獨(dú)立成應(yīng)用。以后想替換算法只需要改業(yè)務(wù)邏輯不需要改路由配置。4. 后端模型設(shè)計(jì)用數(shù)據(jù)表描述用戶行為在音樂(lè)推薦系統(tǒng)里模型設(shè)計(jì)直接決定推薦算法的質(zhì)量。我們以“歌手Singer— 歌曲Song— 評(píng)分Rating”三張核心表為例來(lái)進(jìn)行搭建。打開(kāi)music/models.py完整代碼如下from django.db import models from django.conf import settings class Singer(models.Model): 歌手表 name models.CharField(max_length100, verbose_name歌手名稱) avatar models.URLField(blankTrue, verbose_name封面地址) description models.TextField(blankTrue, verbose_name歌手簡(jiǎn)介) class Meta: verbose_name 歌手 verbose_name_plural verbose_name def __str__(self): return self.name class Song(models.Model): 歌曲表 title models.CharField(max_length200, verbose_name歌曲名稱) singer models.ForeignKey( Singer, on_deletemodels.CASCADE, related_namesongs, verbose_name歌手 ) cover models.URLField(blankTrue, verbose_name封面地址) audio_url models.URLField(verbose_name音頻播放地址) duration models.IntegerField(default0, verbose_name時(shí)長(zhǎng)秒) play_count models.IntegerField(default0, verbose_name播放次數(shù)) publish_date models.DateField(nullTrue, blankTrue, verbose_name發(fā)行日期) class Meta: verbose_name 歌曲 verbose_name_plural verbose_name ordering [-play_count] def __str__(self): return f{self.title} - {self.singer.name} class Rating(models.Model): 用戶評(píng)分表 user models.ForeignKey( settings.AUTH_USER_MODEL, on_deletemodels.CASCADE, related_nameratings, verbose_name用戶 ) song models.ForeignKey( Song, on_deletemodels.CASCADE, related_nameratings, verbose_name歌曲 ) score models.IntegerField( default5, verbose_name評(píng)分1-5 ) created_at models.DateTimeField(auto_now_addTrue, verbose_name評(píng)分時(shí)間) class Meta: verbose_name 用戶評(píng)分 verbose_name_plural verbose_name unique_together (user, song) def __str__(self): return f{self.user.username} 評(píng) {self.song.title}{self.score}這里需要解釋幾個(gè)關(guān)鍵設(shè)計(jì)決策Rating使用unique_together (user, song)目的是避免用戶對(duì)同一首歌重復(fù)評(píng)分。如果用戶再次評(píng)分應(yīng)該走更新邏輯而不是再插入一條記錄。audio_url和cover使用 URLField前端播放器可以直接使用該地址方便后續(xù)接入實(shí)際音頻資源。每張表都定義了verbose_name這會(huì)讓 Django Admin 后臺(tái)的顯示更規(guī)范同時(shí)處理較為美觀。完成模型后執(zhí)行遷移命令python manage.py makemigrations python manage.py migrate python manage.py createsuperuser啟動(dòng)開(kāi)發(fā)服務(wù)器后登錄后臺(tái)http://127.0.0.1:8000/admin/可以錄入幾組真實(shí)數(shù)據(jù)。推薦數(shù)據(jù)條數(shù)大致為歌手 10 個(gè)左右每名歌手關(guān)聯(lián) 5-10 首歌然后注冊(cè) 3-5 個(gè)測(cè)試用戶分別對(duì)歌曲進(jìn)行評(píng)分。這些測(cè)試數(shù)據(jù)是算法展示效果的關(guān)鍵基礎(chǔ)。5. 協(xié)同過(guò)濾推薦算法的核心實(shí)現(xiàn)打開(kāi)recommend/utils.py以下代碼實(shí)現(xiàn)的邏輯屬于教學(xué)中較常用的“基于物品的協(xié)同過(guò)濾 基于用戶的協(xié)同過(guò)濾”雙策略。from math import sqrt from collections import defaultdict from music.models import Rating, Song def get_user_item_matrix(): 將評(píng)分?jǐn)?shù)據(jù)轉(zhuǎn)換為 用戶 - {歌曲ID: 評(píng)分} 的字典結(jié)構(gòu) user_item defaultdict(dict) ratings Rating.objects.all().select_related(user, song) for r in ratings: user_item[r.user_id][r.song_id] r.score return dict(user_item) def get_item_user_matrix(user_item): 轉(zhuǎn)換為 歌曲ID - {用戶ID: 評(píng)分} 的字典結(jié)構(gòu)方便計(jì)算歌曲相似度 item_user defaultdict(dict) for user_id, songs in user_item.items(): for song_id, score in songs.items(): item_user[song_id][user_id] score return dict(item_user) def cosine_similarity(vec1, vec2): 基于共同評(píng)分用戶的余弦相似度計(jì)算 common set(vec1.keys()) set(vec2.keys()) if not common: return 0.0 dot sum(vec1[u] * vec2[u] for u in common) norm1 sqrt(sum([v ** 2 for v in vec1.values()])) norm2 sqrt(sum([v ** 2 for v in vec2.values()])) if norm1 0 or norm2 0: return 0.0 return dot / (norm1 * norm2) def user_similarity_matrix(user_item): 計(jì)算用戶之間的相似度矩陣 users list(user_item.keys()) sim_matrix defaultdict(dict) for i in range(len(users)): for j in range(i 1, len(users)): sim cosine_similarity(user_item[users[i]], user_item[users[j]]) if sim 0: sim_matrix[users[i]][users[j]] sim sim_matrix[users[j]][users[i]] sim return dict(sim_matrix) def recommend_by_user_based(user_id, top_n10): 基于用戶的協(xié)同過(guò)濾推薦 user_item get_user_item_matrix() if user_id not in user_item: return [] sims user_similarity_matrix(user_item) target_user_songs user_item[user_id] score_dict defaultdict(float) # 找到與當(dāng)前用戶最相似的若干個(gè)用戶 sorted_sims sorted(sims.get(user_id, {}).items(), keylambda x: x[1], reverseTrue)[:5] for other_user_id, sim_value in sorted_sims: for song_id, score in user_item[other_user_id].items(): if song_id in target_user_songs: continue score_dict[song_id] sim_value * score ranked_songs sorted(score_dict.items(), keylambda x: x[1], reverseTrue)[:top_n] return [song_id for song_id, _ in ranked_songs] def build_item_similarity_matrix(): 預(yù)計(jì)算歌曲之間的相似度矩陣返回 歌曲A - 歌曲B - 相似度 user_item get_user_item_matrix() item_user get_item_user_matrix(user_item) item_ids list(item_user.keys()) sim_matrix defaultdict(dict) for i in range(len(item_ids)): for j in range(i 1, len(item_ids)): sim cosine_similarity(item_user[item_ids[i]], item_user[item_ids[j]]) if sim 0: sim_matrix[item_ids[i]][item_ids[j]] sim sim_matrix[item_ids[j]][item_ids[i]] sim return dict(sim_matrix) def recommend_by_item_based(user_id, top_n10): 基于物品的協(xié)同過(guò)濾推薦 user_item get_user_item_matrix() if user_id not in user_item: return [] item_sim build_item_similarity_matrix() user_history user_item[user_id] score_dict defaultdict(float) # 遍歷用戶聽(tīng)過(guò)的歌找出每首歌的相似歌曲 for listened_song_id, rating in user_history.items(): for similar_song_id, sim in item_sim.get(listened_song_id, {}).items(): if similar_song_id in user_history: continue score_dict[similar_song_id] sim * rating ranked_songs sorted(score_dict.items(), keylambda x: x[1], reverseTrue)[:top_n] return [song_id for song_id, _ in ranked_songs]代碼里需要重點(diǎn)掌握三個(gè)細(xì)節(jié)相似度計(jì)算現(xiàn)在采用的方法是先找出兩個(gè)向量里的共同元素再做余弦相似度計(jì)算。這里的“向量”可以是一個(gè)用戶在不同歌曲上的評(píng)分序列也可以是一首歌在不同用戶下的評(píng)分序列它不影響代碼復(fù)用。兩級(jí)過(guò)濾相似度矩陣計(jì)算完成之后生成候選集時(shí)會(huì)顯式跳過(guò)用戶已經(jīng)聽(tīng)過(guò)的歌這樣可以避免“推薦用戶已經(jīng)聽(tīng)過(guò)的歌”這種低體驗(yàn)的場(chǎng)景。計(jì)算時(shí)機(jī)在數(shù)據(jù)量很小的畢設(shè)場(chǎng)景里接口每次臨時(shí)計(jì)算相似度是可行的。但如果你演示時(shí)有幾百個(gè)用戶甚至更多需要在論文里寫(xiě)明“在線計(jì)算成本高”進(jìn)而選擇預(yù)先算好相似度矩陣、離線緩存相似度結(jié)構(gòu)的方法。答辯時(shí)老師很可能會(huì)順著這個(gè)問(wèn)題往下問(wèn)。6. 用 Django REST Framework 暴露推薦接口推薦算法算完后前端需要的不是一個(gè)歌曲 ID 列表而是完整的歌曲信息例如歌名、歌手、封面和音頻地址。所以接口層負(fù)責(zé)拼接數(shù)據(jù)返回。在recommend/views.py中編寫(xiě)from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated from music.models import Song from music.serializers import SongSerializer from .utils import recommend_by_item_based, recommend_by_user_based class RecommendSongView(APIView): 獲取推薦歌曲列表 permission_classes [IsAuthenticated] def get(self, request): algorithm request.query_params.get(algorithm, item) user request.user if algorithm user: song_ids recommend_by_user_based(user.id, top_n10) else: song_ids recommend_by_item_based(user.id, top_n10) # 防止數(shù)據(jù)庫(kù)里還沒(méi)有評(píng)分?jǐn)?shù)據(jù)導(dǎo)致報(bào)錯(cuò) songs Song.objects.filter(id__insong_ids) if song_ids else Song.objects.none() # 保持推薦順序filter(id__in...) 不會(huì)按列表順序返回這里手動(dòng)排序 song_map {song.id: song for song in songs} ordered_songs [song_map[sid] for sid in song_ids if sid in song_map] serializer SongSerializer(ordered_songs, manyTrue, context{request: request}) return Response({ code: 0, message: success, data: serializer.data })這里需要說(shuō)明一個(gè)隱藏問(wèn)題Song.objects.filter(id__insong_ids)返回的順序和song_ids列表的順序是不一致的。為了讓前端展示順序和算法打分順序保持一致我做了一次手動(dòng)映射排序。這個(gè)細(xì)節(jié)在面試或答辯中如果主動(dòng)說(shuō)出來(lái)屬于“實(shí)戰(zhàn)經(jīng)驗(yàn)型亮點(diǎn)”。music/serializers.py中定義嵌套的歌曲序列化器from rest_framework import serializers from .models import Singer, Song, Rating class SingerSerializer(serializers.ModelSerializer): class Meta: model Singer fields [id, name, avatar, description] class SongSerializer(serializers.ModelSerializer): singer SingerSerializer(read_onlyTrue) class Meta: model Song fields [id, title, singer, cover, audio_url, duration, play_count, publish_date]然后在recommend/urls.py中配置路由from django.urls import path from .views import RecommendSongView urlpatterns [ path(songs/, RecommendSongView.as_view(), namerecommend-songs), ]同時(shí)在music/urls.py里提供歌曲列表、評(píng)分、收藏等常用接口接口。評(píng)分接口代碼如下# music/views.py from rest_framework.views import APIView from rest_framework.response import Response from rest_framework.permissions import IsAuthenticated from django.shortcuts import get_object_or_404 from .models import Song, Rating class RateSongView(APIView): 給歌曲評(píng)分重復(fù)評(píng)分則更新分?jǐn)?shù) permission_classes [IsAuthenticated] def post(self, request): song_id request.data.get(song_id) score request.data.get(score, 5) try: score int(score) if score 1 or score 5: raise ValueError except (TypeError, ValueError): return Response({code: 400, message: 評(píng)分需為 1-5 的整數(shù)}) song get_object_or_404(Song, idsong_id) rating, created Rating.objects.update_or_create( userrequest.user, songsong, defaults{score: score} ) return Response({ code: 0, message: 評(píng)分成功 if created else 評(píng)分已更新, data: {rating_id: rating.id, score: rating.score} })上述代碼用到了 Django ORM 中非常實(shí)用的一招update_or_create。它把“有則更新、無(wú)則新建”的邏輯壓縮成了一行代碼避免先f(wàn)ilter().exists()再update()的繁瑣寫(xiě)法。7. Vue 前端把推薦結(jié)果變成可交互頁(yè)面前端采用 Vue 3 Axios 開(kāi)發(fā)。這里不展開(kāi)腳手架創(chuàng)建細(xì)節(jié)核心思路是頁(yè)面加載時(shí)向后端推薦接口發(fā)起請(qǐng)求拿到data后渲染到“推薦歌曲”列表中。template div classcontainer h2猜你喜歡/h2 div classtoolbar button clickloadRecommend(item) :class{ active: algorithm item }相似歌曲推薦/button button clickloadRecommend(user) :class{ active: algorithm user }相似用戶推薦/button /div div v-ifloading classloading推薦加載中.../div div v-else classsong-list div classsong-card v-forsong in songs :keysong.id img :srcsong.cover || defaultCover alt封面 classcover / div classinfo div classtitle{{ song.title }}/div div classsinger{{ song.singer.name }}/div audio :srcsong.audio_url controls/audio /div /div /div p v-if!loading songs.length 0 classempty 暫無(wú)推薦結(jié)果請(qǐng)先給幾首歌曲打分 /p /div /template script import axios from axios; export default { name: RecommendList, data() { return { songs: [], loading: false, algorithm: item, defaultCover: https://via.placeholder.com/100, }; }, methods: { async loadRecommend(algorithm) { this.algorithm algorithm; this.loading true; try { const response await axios.get(/api/recommend/songs/, { params: { algorithm }, headers: { Authorization: Bearer ${localStorage.getItem(token)} }, }); this.songs response.data.data; } catch (error) { console.error(加載推薦失敗, error); this.songs []; } finally { this.loading false; } }, }, mounted() { this.loadRecommend(item); }, }; /script style scoped .container { max-width: 900px; margin: 0 auto; padding: 20px; } .toolbar { margin-bottom: 20px; } .toolbar button { margin-right: 10px; padding: 8px 16px; border: 1px solid #ddd; border-radius: 4px; background: #fff; cursor: pointer; } .toolbar button.active { background: #409eff; color: #fff; border-color: #409eff; } .song-card { display: flex; align-items: center; background: #f9f9f9; border-radius: 8px; padding: 12px; margin-bottom: 12px; } .cover { width: 80px; height: 80px; border-radius: 8px; margin-right: 16px; object-fit: cover; } .info { flex: 1; } .title { font-size: 18px; font-weight: bold; } .singer { color: #888; margin: 4px 0 8px; } audio { width: 100%; } .empty { text-align: center; color: #999; padding: 40px 0; } /style這個(gè)組件里隱藏了一個(gè)工程化問(wèn)題開(kāi)發(fā)環(huán)境里 Vue 頁(yè)面通過(guò) Axios 請(qǐng)求 Django 后端涉及“跨域”問(wèn)題。為了順利聯(lián)調(diào)需要在 Django 的settings.py中增加INSTALLED_APPS [ # ... corsheaders, ] MIDDLEWARE [ corsheaders.middleware.CorsMiddleware, # ... ] CORS_ALLOW_ALL_ORIGINS True生產(chǎn)環(huán)境不允許CORS_ALLOW_ALL_ORIGINS True這種做法只適合本地開(kāi)發(fā)驗(yàn)證。更穩(wěn)妥的做法是配置具體的前端域名白名單例如CORS_ALLOWED_ORIGINS [ http://localhost:5173, http://127.0.0.1:5173, ]8. 運(yùn)行驗(yàn)證與觀察推薦效果完成以上步驟后按順序做一輪全鏈路驗(yàn)證。8.1 準(zhǔn)備測(cè)試數(shù)據(jù)通過(guò) Django Admin 或命令行錄入測(cè)試數(shù)據(jù)這里給出三條模擬評(píng)分?jǐn)?shù)據(jù)。用 shell 代碼添加測(cè)試用戶并評(píng)分python manage.py shellfrom django.contrib.auth.models import User from music.models import Singer, Song, Rating singer Singer.objects.create(name某知名歌手) song1 Song.objects.create(title歌曲A, singersinger, audio_urlhttps://example.com/a.mp3) song2 Song.objects.create(title歌曲B, singersinger, audio_urlhttps://example.com/b.mp3) song3 Song.objects.create(title歌曲C, singersinger, audio_urlhttps://example.com/c.mp3) u1, _ User.objects.get_or_create(usernameu1, passwordpbkdf2_sha256$) u2, _ User.objects.get_or_create(usernameu2, passwordpbkdf2_sha256$) Rating.objects.create(useru1, songsong1, score5) Rating.objects.create(useru1, songsong2, score4) Rating.objects.create(useru2, songsong1, score5) Rating.objects.create(useru2, songsong3, score3)執(zhí)行完成后退出 shell。注意上面的password只是占位在實(shí)際登錄驗(yàn)證時(shí)需要對(duì)這些測(cè)試用戶設(shè)置真實(shí)密碼u1.set_password(123456) u1.save() u2.set_password(123456) u2.save()8.2 通過(guò)接口驗(yàn)證推薦結(jié)果啟動(dòng) Djangopython manage.py runserver使用 Token 或 JWT 獲取用戶身份后請(qǐng)求curl -H Authorization: Bearer token \ http://127.0.0.1:8000/api/recommend/songs/?algorithmitem預(yù)期返回的 JSON 結(jié)構(gòu)如下{ code: 0, message: success, data: [ { id: 3, title: 歌曲C, singer: { id: 1, name: 某知名歌手 }, audio_url: https://example.com/c.mp3, play_count: 0 } ] }8.3 怎么判斷推薦是否正常不要只看“有沒(méi)有返回?cái)?shù)據(jù)”要檢查以下三個(gè)維度推薦列表里是否排除了用戶已評(píng)分的歌曲用戶 A 和用戶 B 的歷史行為不同調(diào)換用戶身份請(qǐng)求接口時(shí)推薦結(jié)果是否存在差異把測(cè)試用戶歷史行為修改為完全離群數(shù)據(jù)后推薦結(jié)果是否隨之改變。如果兩組不同用戶的推薦結(jié)果完全相同大概率是評(píng)分矩陣沒(méi)有按用戶區(qū)分需要回查get_user_item_matrix()里r.user_id取到的是不是同一個(gè)用戶。9. 常見(jiàn)問(wèn)題與排查思路做這類系統(tǒng)的過(guò)程中大家容易遇到的問(wèn)題我做了一個(gè)總結(jié)式的清單。它本身也是論文“系統(tǒng)測(cè)試與問(wèn)題分析”章節(jié)的直接素材。問(wèn)題現(xiàn)象可能原因排查方式解決方案推薦接口報(bào) 401前端請(qǐng)求頭沒(méi)有攜帶 Token打開(kāi)瀏覽器 Network 面板查看 Authorization 字段在 Axios 攔截器中統(tǒng)一注入 Token推薦結(jié)果為空當(dāng)前用戶沒(méi)有任何評(píng)分行為調(diào)接口前檢查數(shù)據(jù)庫(kù)中 Rating 表無(wú)行為數(shù)據(jù)時(shí)返回?zé)衢T(mén)歌曲兜底而不是返回空列表推薦列表順序與打分不一致filter(id__in...)不保證順序打印song_ids列表與接口返回列表對(duì)比建立id - Song映射后手動(dòng)排序用戶相似度全是 0兩個(gè)用戶沒(méi)有共同評(píng)分過(guò)的歌曲檢查余弦相似度函數(shù)中共同元素集合是否為空補(bǔ)充測(cè)試用戶之間的共同評(píng)分記錄接口請(qǐng)求跨域前后端端口不同查看瀏覽器 Console 的 CORS 錯(cuò)誤配置django-cors-headers并在白名單里添加前端地址item 推薦與 user 推薦結(jié)果相同用戶相似度矩陣或物品相似度矩陣存在退化打印矩陣查看相似度較大值是否集中在少數(shù)歌曲上增加差異化數(shù)據(jù)檢查是否誤傳入同一張矩陣用戶重復(fù)評(píng)分的記錄出現(xiàn)多條沒(méi)有為user song建唯一約束查看 Django Admin 的 Rating 記錄在 Meta 中添加unique_together使用update_or_create保證冪等新用戶登錄后沒(méi)有推薦冷啟動(dòng)問(wèn)題檢查該用戶是否產(chǎn)生過(guò)行為記錄冷啟動(dòng)階段用“熱門(mén)歌曲榜”做替代推薦方案音頻地址無(wú)法播放在線音頻資源本身跨域或失效用瀏覽器直接打開(kāi)audio_url測(cè)試替換為可公開(kāi)訪問(wèn)的音頻直鏈或在前端配置代理算法返回極慢在線計(jì)算所有相似度未做緩存統(tǒng)計(jì)接口耗時(shí)時(shí)長(zhǎng)離線預(yù)計(jì)算相似度矩陣并緩存到文件或數(shù)據(jù)庫(kù)9.1 冷啟動(dòng)怎么在代碼頭解決“冷啟動(dòng)”是答辯時(shí)老師最常問(wèn)的問(wèn)題之一。實(shí)際產(chǎn)品中面對(duì)新用戶沒(méi)有行為數(shù)據(jù)推薦系統(tǒng)無(wú)法建模。畢設(shè) Demo 可以采用常見(jiàn)工程解法新用戶注冊(cè)后默認(rèn)展示全站播放量最高的 Top 10 歌曲作為熱門(mén)推薦只有在用戶產(chǎn)生足夠評(píng)分之后系統(tǒng)才啟用協(xié)同過(guò)濾推薦在接口層的判斷邏輯為先檢查用戶是否存在評(píng)分記錄不存在則走熱門(mén)兜底邏輯。這樣不存在“推薦結(jié)果為空”的問(wèn)題可以直接跨過(guò)數(shù)據(jù)不足帶來(lái)的體驗(yàn)尷尬。熱門(mén)兜底的推薦接口可簡(jiǎn)單實(shí)現(xiàn)為from music.models import Song from music.serializers import SongSerializer def recommend_hot_songs(top_n10): 冷啟動(dòng)階段沒(méi)有行為數(shù)據(jù)時(shí)返回全站熱門(mén) songs Song.objects.order_by(-play_count)[:top_n] return songs9.2 “評(píng)分預(yù)測(cè)”和“TopN 推薦”有什么區(qū)別很多教材會(huì)把協(xié)同過(guò)濾分成兩個(gè)問(wèn)題方向評(píng)分預(yù)測(cè)目標(biāo)是預(yù)測(cè)用戶會(huì)給某首歌打幾分常用評(píng)估指標(biāo)是 RMSE、MAETopN 推薦目標(biāo)是生成一個(gè)用戶可能喜歡的歌曲列表常用評(píng)估指標(biāo)是準(zhǔn)確率、召回率。本系統(tǒng)采用的方式是 TopN 推薦因此返回結(jié)果的接口設(shè)計(jì)用列表形式呈現(xiàn)推薦候選歌曲。很多同學(xué)在論文里把這兩類問(wèn)題混著寫(xiě)導(dǎo)致“問(wèn)題定義不清”直接被導(dǎo)師打回。建議在第 4 章就明確寫(xiě)下這一段本系統(tǒng)完成的是 TopN 推薦因此評(píng)估指標(biāo)不采用 RMSE而是重點(diǎn)分析推薦結(jié)果是否貼合用戶興趣。10. 最佳實(shí)踐與工程建議如果你的目標(biāo)不只是一份“能跑過(guò)的代碼”而是希望導(dǎo)師覺(jué)得你具備工程能力和安全規(guī)范可以把下面的建議內(nèi)化進(jìn)代碼與文檔中。10.1 算法層相似度矩陣“離線計(jì)算在線讀取”項(xiàng)目數(shù)據(jù)量較小時(shí)接口內(nèi)實(shí)時(shí)計(jì)算相似度完全沒(méi)問(wèn)題。但如果是答辯現(xiàn)場(chǎng)演示點(diǎn)擊一次推薦按鈕要卡住三四秒體驗(yàn)會(huì)很糟糕。更規(guī)范的做法是寫(xiě)一個(gè)manage.pycommand 或定時(shí)任務(wù)每隔一段時(shí)間預(yù)計(jì)算一次相似度矩陣把矩陣結(jié)果緩存進(jìn)數(shù)據(jù)庫(kù)或內(nèi)存例如使用 JSON 字段或 Redis用戶請(qǐng)求時(shí)直接讀取緩存好的相似度矩陣只對(duì)當(dāng)前用戶執(zhí)行打分求和 TopN 排序。這樣可大幅優(yōu)化響應(yīng)時(shí)間。在論文系統(tǒng)設(shè)計(jì)部分你可以給出這樣的說(shuō)明“系統(tǒng)采用離線計(jì)算、在線推薦的服務(wù)架構(gòu)”。老師聽(tīng)了會(huì)覺(jué)得你有生產(chǎn)環(huán)境意識(shí)。10.2 冷啟動(dòng)與數(shù)據(jù)稀疏問(wèn)題要寫(xiě)進(jìn)論文更完整的協(xié)同過(guò)濾畢設(shè)都需要回應(yīng)“數(shù)據(jù)稀疏”的經(jīng)典質(zhì)疑。你的論文里最好有一小節(jié)專門(mén)說(shuō)明當(dāng)用戶-歌曲評(píng)分矩陣非常稀疏時(shí)基于共同評(píng)分的余弦相似度可能不準(zhǔn)確當(dāng)前系統(tǒng)使用了“熱門(mén)歌曲兜底”策略保證數(shù)據(jù)不足時(shí)也能返回可用推薦未來(lái)改進(jìn)方向可以加入基于內(nèi)容特征的 Bandit 策略或 Embedding 化召回。10.3 數(shù)據(jù)與代碼安全既然是系統(tǒng)開(kāi)發(fā)建議遵循與實(shí)際工業(yè)一致的部署意識(shí)使用 Djangocreatesuperuser錄入的測(cè)試密碼不要在代碼中明文保存管理員口令。生成接口返回歌曲詳情時(shí)只返回與前端展示有關(guān)的字段涉及內(nèi)部狀態(tài)字段的處理建議單獨(dú)設(shè)計(jì)。批量寫(xiě)測(cè)試數(shù)據(jù)時(shí)先備份好原始數(shù)據(jù)再執(zhí)行 Django 的 shell 腳本。推薦接口需要登錄態(tài)驗(yàn)證不推薦將接口完全公開(kāi)。10.4 前后端分離配置建議如果你的前端使用的是 Vite 開(kāi)發(fā)服務(wù)器Proxy 方式比跨域更自然。在vite.config.js中增加export default { server: { proxy: { /api: { target: http://127.0.0.1:8000, changeOrigin: true, }, }, }, };配置好代理之后前端代碼里的請(qǐng)求地址可以統(tǒng)一寫(xiě)成相對(duì)路徑/api/xxx不需要在多個(gè)組件里硬編碼完整域名。10.5 包管理和版本鎖定畢設(shè)提交時(shí)建議統(tǒng)一鎖定版本避免換一臺(tái)電腦跑不起來(lái)??墒褂胮ip freeze requirements.txt提交的代碼包里保留requirements.txt并附上版本說(shuō)明。11. 總結(jié)與后續(xù)學(xué)習(xí)方向至此你已經(jīng)有能力完整地搭建一個(gè)前后端分離的音樂(lè)推薦系統(tǒng)使用 Django 描述了歌手、歌曲和用戶評(píng)分三類核心數(shù)據(jù)基于用戶評(píng)分矩陣實(shí)現(xiàn)了基于物品與基于用戶兩種協(xié)同過(guò)濾算法通過(guò) Django REST Framework 把推薦結(jié)果轉(zhuǎn)換成 JSON 接口用 Vue 制作了一個(gè)“猜你喜歡”頁(yè)面并能切換兩套算法查看效果梳理了冷啟動(dòng)、相似度計(jì)算、接口順序等問(wèn)題并給出排查方法。如果這個(gè)項(xiàng)目用作畢業(yè)設(shè)計(jì)接下來(lái)的優(yōu)化方向我建議按你論文的定位來(lái)從算法對(duì)比角度切入的同學(xué)可以增加評(píng)價(jià)指標(biāo)比如把推薦集合與用戶真實(shí)喜好進(jìn)行比對(duì)從系統(tǒng)實(shí)現(xiàn)角度切入的同學(xué)可以把評(píng)分矩陣的構(gòu)造做成動(dòng)態(tài)采集并把播放行為變成可量化的隱式反饋對(duì)前端展示有追求的同學(xué)可以在列表里加入收藏、歌詞滾動(dòng)、播放歷史形成更完整的用戶閉環(huán)。整理代碼和文檔時(shí)建議專門(mén)把“推薦算法如何從模型設(shè)計(jì)一路走到前端展示”這條主線寫(xiě)清楚。畢設(shè)答辯最看重的是主線清晰所有模塊最好都能像鏈條一樣銜接自然。代碼跑通后再回頭給自己的軟件配上一份可復(fù)現(xiàn)的操作說(shuō)明這份工作對(duì)未來(lái)的項(xiàng)目復(fù)盤(pán)和改進(jìn)都會(huì)有明顯幫助。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
精品欧美不卡在线播放| 久96热在线观看视频| 91天堂色男人的天堂| 男人天堂 天天射| 黑丝自慰喷水网站| 久久精品中文字幕无码l| 久久久久久免费电影| 熟女性视频| 免费看黄片现成| 亚洲日韩熟女人妻高清在线| 熟女突然公开看18禁影片| 久久系列| 99精品综合久久久久五月天| 欧美亚洲AN| 天天爽天天操| 久久毛卡| 亚洲 日本 国产 综合| 嗯嗯啊啊的视频| 欧美日韩丝袜| 国产精品香蕉热久久新品| 国产综合色精品在线观看| 91精产一区二区三区| 丰满人妻一区二区三区在线| 国产热RE99久久6国产精品首| 国产黄色剧情影片麻豆免费播放| 日本大香蕉综合网| 欧美综合色| 五月天婷婷欧美三区| 国产强奸乱伦xd| 亚洲天天影视综合网| 99热成人| 视频分类 国内精品| 亚洲图片日本AⅤ欧美在线| 日韩精品 欧美激情| 婷婷15月天青娱乐| 校园春色亚洲无码| 人人摸人人干| 一区二区日韩欧美久久| 色综合久| 亚洲第一无码播放立川理惠| 日韩欧美中文字亚洲慕| 五毛骚逼极品美女怕怕| 中文幕97| 中亚黄色三级大片| 97超碰超欧美。| 久久久久一本一区二区青青蜜月| 丝袜综合色图| 超碰天天久久79| 欧美日不卡| 一二三四免费视频| 丝袜综合| 91青青在线视频| 啊啊啊啊啊啊啊啊要喷了| 中文字幕人妻色偷偷久久皮| 亚洲日韩乱码中文无码蜜桃臀网站| 狠插 制服 自拍| 婷婷色婷婷| 免费综合亚洲中文| 97综合在线| 国产又爽又黄| 97香焦色区| 用力操死我| 国产精品 午夜福利| 久久久久9| 激情综合五| 国产67194| 95人妻爽爽人人做人人澡 | 欧美 传媒 麻豆 日韩 偷拍| 操b网站亚洲无码| 亚洲综合九| 夜夜做夜夜爽精品视频| 偷拍亚洲视频一区二区三区四区| 丝袜足交视频| 狠狠久久手机视频精品| 99久久久er直播网址| 亚洲国产精品成人综合| 无码人妻一区二区三区色欲aⅴ | 色色五月天婷婷| 欧洲综合色| 精品一区二区三区18| 好吊色综合| 日韩免费簧片| 精品一二三区久久AAA片| 国产吞精a级片激情电影| 综合激情五月丁香| 精品久久一区二区三区四区五区| 人人综合| www欧美91| 91综合色噜噜| 日韩AC| 久草久热| 成人片视频| 91色欧美| 国产精品蜜臀久久久久无码AV| 亚洲欧美高清无码| 人人干人人搞人人摸| 人妻熟女午夜精品在线| juliaann精品熟女一区| 欧美乱欲| 婷婷色影院| 欧美色图校园春色| 欧亚成人| 任我爽视频在线观看| 日韩精品大香蕉伊人在线| 69一区二区三区 | 影音先锋日本一区二区| 色综合色综合网| 日日夜夜干| 国产亚洲色婷婷99精品91| 欧美操逼录像国产黄色国产| 91啦人妻| 国产黄a三级三级三级av在线看| 蜜色网色哟哟| 亚洲成人性爱网站在线播放| 超碰97在线 欧美 国产| 91综合色噜噜| 97电影院超碰| 91人人| 极品尤物在线观看| 欧美人妻另类在线| 女人 A一级| 岛国小电影| 超碰导航97| 伦理片秋霞免费影院| 98精品国产乱码久久久久久| 国产Av超碰| 色爽爽文学| 狠久久| 亚洲国产无码精品首页久久久| 欧美暴力猛交| 97香蕉网| 2000亚洲男人天堂| 国产一区二区成人av在线播放| 夂久色| 欧美性夜| 亚洲淫色网中文| 欧美日韩国产一区二区小黄片大全| 狠狠操夜夜操蜜桃视频三区| 91色图| A V少妇特黄三级| 色九色久| 国产男女无套97| 伊人热综合| 九九玖玖精品| 国产精品久久天天干| 国内精品999| 精品一区二区三区免费古装毛片香港三级日本三级人妇 | 性色av网站| 亚洲激情 欧美色图| 伊人国产AV| 亚洲熟女中文字幕在线| 囯产精品久久久久久久久久二区三区| 女同在线视频一区| 污色区网站| 花野真衣| 日本视频在线观看污污污| 欧美美女自慰一区二区三区| 亚洲精品久久久久毛片A片拉屎| 婷婷操逼| 思思热在线视频免费| 日本 免费 一区二区三区 久久香蕉| 国产免费大片| 另类亚洲一区二区三区| 久操视频在线| 人妻熟女字幕一区二区| 9丨亚洲一区二区在线| 亚洲天堂情色| 丁香五月激情网| 2021国产成人精品久久| 国产久久男人天堂| 蜜臀久久99精品久久久久久久久| 先锋影音av先锋一区| 日产123区精品免费观看| 啊啊啊操一区| 另类TS人妖一区二区三区| 亚洲一卡2卡3卡4卡乱码网站 | 99热日| www网站黄| 99热国产精品| 国产 大胆 对白| 国产AV久久久蜜爱影集| 亚洲综合有玛| 极品久久久久久久久久久久久久| 日韩欧美性爱电影在线观看| 久视频在线观看| 屁股久久久久久久久| 北京专精特新企业招聘信息| 国产91啪| 三级特黄60分钟播放| 亚州男人的天堂| 久久久久久欧美精品se一二三四| 丰满人妻-区二区三区| 欧美激情片一区二区| 性色生活片久久毛片婬片免费放女人一级毛片| 91丝袜人妻| 欧美日韩大陆黑人少妇99| 亚洲综合九九| 国产日本顶级一区二区三区| 亚洲美女 晚间男人天堂 | 中文啪啪视频| 国产黄色av大片网站| 十八禁啪啪视频| 久久有码视频| 亚洲视频二区| 1区2区3区中文字幕日韩| 盗摄 精品 另类 一区| 国产精品无码av| 秋霞Av理论一级在线| 很很很很操| 另类av天堂| 亚洲性爱高潮影院| 久久久久9| 中文字幕丝袜国产第一页不卡| 超碰欧美| 黄色av网站在线播放| 欧美天天射| 一本大道青青| 欧美美女视频| 欧美欧美少妇| 欧美 亚洲 在线| 亚洲春色欧美| 熟妇国产免费一区| 国产2.3.4区| 岛国不卡超碰护士AV在线播放| 天天舔九色婷婷| 色妹子A V| 92福利社视频| 天天影视综合网欧美精品| 自偷自拍的亚洲视频| 九月丁香综合网| 99久久婷婷丁香| 黄片色区软件| 亚洲精品乱码久久久久久蜜桃麻豆| 激情综合网五月婷婷五月天| 亚洲乱码国产乱码精网站| 国产一区二区三区久久久精品| 91肉丝| 天天网综合| 蜜臀久久99精品久久久久久| 色吧91| 亚洲网站一区二区在线| 日本性爰一道本| 粉嫩av平台| 97在线视频观看| 久久区| 三级日韩一区二区三区| 熟女人妇一区二区三区| 日本中文字幕不卡视频| 欧洲综合视频| 日韩AV电影网站| 首页亚洲国产高跟丝袜诱惑视频 | 精品一区二区麻豆| 哑洲在线| 乱伦一区二区三区‘| 国产99久久99热这里只有精品15| 久久‘黄片视频| 婷婷五月天综合网| 午夜啊啊啊| 在线五区| 麻豆国产精品午夜视频| 一区不卡在线观看av| 日韩丝袜二区| 一区,二区,三区网站| 好屌色综合| 欧美手机在线综合| 欧美日韩在线视频网站| 午夜理论片在线观看免费| 色五月综合| 欧美色图亚州激情| 成年在线视频日本亚洲在线视频区精品江靖宇公司 | 狠狠操夜夜操蜜桃视频三区| 美女黑人91神马| 欧美BT 亚洲色图| 狠狠操使劲操| 五月天婷婷色| 96久久久精品| 男女啊啊啊| 国产人妖视频一区在线观看| 日韩免费人妻色情网站| 加勒比性爱成人在线| 密臀视频三区免费网站| 国产精品久久久三级无码| 超碰激情808| 精品无人区麻豆乱码1区2区图片 | 一级特黄aaa大片在线观看成人一级片在线观看 | 中文字幕视频2区| 嗯嗯啊啊啊啊轻点视频| 精品国模无码| oumeisetu综合| 欧洲精品欧洲精品| 日本狂喷奶水在线播放212| 激情五月天婷婷| 欧美后入式| 欧美日韩日产免费网站看| 99国内精品| 97操97干| 国产一区二区欧美日本| 人妻人久久精品中文字幕| 午夜亚洲WWW湿好大| 97天天爽| 亚洲天堂久久久久久粉红视频| 免费的黄片wwwwww| 亚洲国产精品久久久久婷婷老年| 大香蕉www.超碰| 91中文精品日韩欧美在线| 在线视频97| 国产欧美日韩在线观看麻豆传媒公司| 97国产|免费| 日本一级二级三级网站| 伦理日韩国产久久| 国产操逼逼网| 久热网| 蜜桃无码AV一区二区| 久久久久久中文| 精品一啪| 精品人妻一区二区三区视频在线| 99精品网| www.av家庭乱伦| 日本青青草在线| 中文字幕视频在线观看| 人妻精品一区二区在线| 欧美激情 一区| 操逼日韩无码| 欧美高清色| 在线女人91| 日韩欧美大片免费高清啪啪| 超碰中文字幕人妻草一区| www亚洲免费| 亚洲免费在线探花| 日本黄色天堂| 中文字幕第页| 1024人妻熟女一区二区三区| 综合网少妇| 97色在线观看| 日韩激情啪啪啪| 曰本道人妻久久久在线不卡色视频| 玖玖资源综合在线视频| 欧美色干| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 亚洲激情色片 | 天天摸,夜夜摸| 一起草三级AV电影在线观看| 国产亚洲日本| 综合色图亚洲欧美| 中文字幕一区二区三区高清| 中国特猛少妇色xxx| 日本伦理一区二区| 福利色色| 三级色综合| 天天影视综合色| 欧美色图偷拍另类| 熟女这里只有精品6| 欧美玖玖爱免费玖玖| 亚州精人品大香蕉| 蜜乳AV一区二区三区四| 亚洲精品久久久久毛片A片拉屎| 骚逼一区二区| 亚洲一区二区麻豆影院| 超97在线精品视频| 黑人娇小av在线播放| 热热色色综合| 男人的天堂成人的社区| 色99视频| 超碰在线观看av不卡| 男女国产精品| 9九九国产| 国产超碰在线一区| 日本韩国一本产品小视频日本韩国一本产品久久久产品小视频日本韩国一本产品久 | 日韩综合无码色欲vv| 97视频免费| 亚洲日韩东京热一区| 九九九九一区| 亚洲日韩久久精品一区| 国产精品久久久久久久久久久久久久久久久久 | 丁香五月天激情综合| 国产操逼视频在线观看| 十八禁啪啪视频| 欧美最婬乱婬爆婬牲视频| 久久爱超碰网| 亚洲欧美setu| 国产成人亚洲精品自产在线| 欧美性爱三区二区| 国产真乱mangent| 舔人妻中文免费视频| 欧美性色综合网| 亚州精品一区二区三区香中文字幕在线| 在线人成亚洲视频免费观看| 操屄日韩| 午夜操逼不卡| 中文字幕国产| 少妇熟女1区2区3区| 久久一二三四五六七八九区| 射丝袜大香蕉| 偷拍片久久| 91成人国产综合久久精品蜜月| 成 人 影视 一区 二区 三区 四区 | 91爱做| 夜夜免费视频| 大香蕉之青青草原| 激情四射五月天| 日夜干射色啊| 九九九九九九九九九五码| 春色校园综合网| 日本一区二区电影网站| 青青草在线成人视频| 好淫网一二三视区| 色五月天AV| 国产成人主播| 成人久久久精品| 丝袜美腿射精91| 日韩欧美天堂| 国产精品噜噜噜日日日| 亚洲综合第一页| 天天综合官网| 日韩精品一区二区高清| 啪啪啪精品视频| A片 AV一级在线播放观看免费| 亚洲九月丁香| 欧美黄色大香蕉一区二区| 久久久久婷婷| 蜜臀久久久99久久久久 | 日本欧美m v精品网站加| 60秒免费视频| 91日韩国产欧美亚洲另类精盘州至城都| 国产精品网址| 欧美啪啪色吧在线| 亚洲精品97| 欧美亚洲国产91在线| 日本成人在线不卡一区二区三区 | 九月伊人中文字幕| 国产精品一区二区久久精品| 日韩视频啪啪| 青青草九九九九九| 粉嫩久久久久| 伊人久久AV诱惑悠悠| 日韩欧无码一区二区三区免费不卡| 欧美乱欲| 日韩亚洲国产视频| 99热这里都是精品| 国产亚洲色婷婷99精品91| 2017天天操天天日| 国产日韩精品人妻久久久久色欲网站 | 久久国产逼| 在线看免费无码AV天堂的| 九九热精品免费视频| 少妇内射www在线观看视频| 在线天堂资源亚洲| 26uuu性| 少妇超碰在线| 亚洲成人妻日韩在线| 夜夜欢天天干| 欧美东京热精品A∨| 按摩中文字幕| 综合网久久| 国内成人圈中文字幕无码视频| 激情小说亚洲| www…国产操逼| 蜜臀AV成人精品蜜臀| 亚欧美综合网| 久久久久9| 日韩精品第3页| 欧美激情专区| AV九九| 人妻少妇精品久久久| 亚洲无 码A片在线观看麻豆| 一起草AV| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 婷婷五月综合在线| 亚洲天堂日本| 性色av大全| 好湿好紧好爽 视频| 亚洲图片视频小说| 国产白嫩漂亮KTV在线| 国产13区| 欧美一区二区三区不卡高清视频| 五月天色五月| 综合五月天| 久久精视频美日韩在线视频| 国产精品久久久久999| 一级@啪啪视频| 精品无吗久久| 无码直播久久久| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 九九热在线精品视频| 在线小说视频一区| a天堂视频| 免费亚洲国产精品久久一区| Blackedraw视频一区二区| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 亚洲日韩av一区二区三区百合| 长久操视频| 久久久久久久国产视频| www.男人天堂| 99性爱在线观看| 色偷综合| 亚洲色综合| 国产三级片在线观看| 日韩天美| 免费试看60秒| 亚洲AV成人无码一区二区三区在线观看| 天堂亚洲精品久久老牛| 国产精品午夜高潮呻吟久久av| 白嫩妹子国产骚| 成人天天爽| 亚洲第一狼人丝袜美女另类| 蜜桃精品视频一区二区三区| 人人贴人人摸| 天天在线91| 五月婷婷六月丁香| 欧美片第一页| 欧美亚州色的图| 国产成人自拍视频在线| 久久亚洲一区女同性恋中文字幕| 黄色AV影视| se吧提供91精品国产91久久久久久| 激情亚洲天堂| 日韩一级特黄av毛片| 97日韩欧美亚洲| 荡小穴在线观看| 韩国手机不卡无码三级视频| 色网在线| 五月婷久久| 日韩在线欧美精品一区二区| 亚洲精品黑丝| 亚洲色图在线视频| 国产精品干干干| 超碰天天操你比| 99久在线精品99re8| 91人妻人人澡人人爽人人精品| 日韩欧美偷拍美女视频| 中文字幕一区二区三区视频播放| 欧美日韩国产成人高清| 91精品国产91久久久久久久久久久久| 久久国产99精品72福利 | 日韩情色视频| 久久久久国产精品喷潮免费观看臀 | 久久精品国产亚洲AV片多多| 国产在线播放成人免费| 噜噜噜亚洲精| 夜夜爽爽夜夜精品视频| 激激五月| 97综合在线| 收看日本人日bb| 伊人网一本| 亚洲色图a| www.色婷婷.com| 欧美做爰无码A片视频| 91|九色|国产熟女| 国产粉嫩蜜臀av一区二区三区| 大香蕉十区| 亚洲精品男人的天堂| 日本欧美一区二区三区免费| 五月天激情四射| 欧亚无码视频| 超碰国产精品无码| av资源在线观看少妇| 免費黃色視頻觀看一| av无线看| 啊啊啊啊啊啊啊啊啊在线观看| 久久久久13| 日韩无码专区| 黄色av一区二区在线| 国产一级作爱毛片| 人人看黄色视频| 欧美极品| 78超碰| 黑白配性爱AV成| 无码heyzo高清一区| 91c色| 韩国黄片aaaa| 操逼逼中文字幕| 一二三四视频中文字幕在线看| 亚洲情欲| 国产主播福利| 91老熟女视频| 中文字幕丰满子伦无码专区在线视频最新| 久久精品超碰| 美女9118禁| 夜夜高潮夜夜爽夜夜爱爱一区| 啊啊啊轻点在线观看| 亚洲免费97免费| 嫩草伊人久久精品| 在线情色电影 91大 | 国产91丝袜 在线播放| 人伦四五区| 骚货操死你| 嗯嗯啊啊啊好爽| 国产午夜福利合集| 九热中文字幕| 欧美日韩*字幕一区| AV乱伦专区| 九九热久久99精品re| 777AV电影| 嫖老熟女A片一二三区| 图片区小说区| 99热成人| 超碰 另类 欧美 | 国产精品一级毛片不卡视| 影音先锋中文字幕日本好一区二区| 综合色播| 美美91成人国产精品欧美精品久久久久久久 | 日本天天人人狠狠在线日美女 | 天天享受天天看| 96国产污污污丝袜| 91色色综合| 亚洲色图欧美色18直播在线| 东京热男人的天堂| 欧洲黄色网| 在线观看色视频| 日本午夜久久电影| 福利偷拍视频-中文字幕2019国语完整视频大全-S91AV | 蜜桃网熟妇| 青青草十区九区爱夜| 天堂射| 欧美乱欲| 国产又粗又长又爽又色| 成人日韩中文字幕| 九久精品| 婷婷亚洲综合| 久偷拍欧美日韩三区| 亚洲色天| 综合久| 久久6热精品99视频| a级免费在线观看| 五月丁香综合啪啪| 亚洲国产青青| 国产日产精品久久快鸭的功能介绍| 91一区二区| 日本国产二线女色| 人妻一区视频| 狠狠操一区二区| 精品亚洲天堂| 91校园春色长篇| 激情文学小说一区二区| 色欲无码人妻日韩欧美精品| 亚洲人在线成线成人| 蜜臀一区二区三区亚洲最新章节在线观看 - 高清蜜臀一区二区三区亚洲全集播放 | 日本性爱不卡视频| 日韩视频小说在线观看 | 天天综合欧美综合| 日韩av在线精品观看| 婷婷五月天_亚洲小说欧美激情另类_精品久久国产字幕 | 大胆91| 我想要 啊 啊 啊| 六月婷婷综合| 超碰久久.com| 久久丁香五月天| 一二区在线观看视频| 欧美成人黄网色网站| 97jingpin| 黄色一级视| 亚洲男人天堂视频| 天天色综亚洲91污| 日日躁狠狠躁天天躁精品| 亚洲古典另类欧美在线| 本道在线| 亚洲偷拍自拍在线视频| 素人伊尹大香蕉免费下载视频| 亚洲午夜福利视频| 亚洲中文字幕av| 亚洲免费看片| 亚洲欧美天堂| 亚洲情色图片区| 国产精品亚洲天堂网址| 久热久| 亚洲综合精品国产一区| 性生活性生大爱77AV国产| www.99在线| 伊人久久AV诱惑悠悠| 嗯嗯嗯嗯啊啊啊好紧好大| 国产在线视频午夜精华在| 亚洲限制级在线| 91在线超高颜值国产| 91爱欧美| 激情久久久| 天天澡天天爽日日AV| 蜜桃视频一区二区三区在线观看| 四虎影视永久在线免费| 欧美精品亚洲精品日韩传电影| 天天肏夜夜肏| 在线视频亚洲无码| 欧洲亚洲天堂精品| 囯产精品一区二区三区线|亚洲人成无码网WWW动漫|国产精品免费一级... | 欧美日韩国产男人| 亚洲Av无码成人精品国产| 亚州性色| 色综合久久夜色精品国产天堂| 亚洲AV无码成人精品久久| 特色a在线上| 搞中出视频在线观看| 久久美女福利是上海美女| 日韩在线观看三级电影| 日韩av情韩国爱禁区av一区二区| 丝袜美腿诱惑亚洲欧美视频在线观看 | 国产一级黄色片在线观看| 中文字幕乱亚洲美女精品一区| juliaann丝袜大战黑鬼| 亚洲成人网站在线观看| 亚洲欧美在线观看无码| 大香久久| 日产成人久久| 情色av电影| 色五月激情综合网| 岛国激情视频软件| 97爱爱爱| 极品出轨视频网站| 婷婷五月天无码 | 国内精品久久人妻性色av| 久热精品在线| 97视频www| 久久久久久久久久久人妻| 最新日韩黄片| 中文字幕一二区二三区人妻专区| 色欲av国内精品久久久久久| 在线五区| 伊人991| 熟妇熟女一区二三区| 婷婷精品| 立川理惠加勒比无码| 综合91网| 一个人免费HD91视频| 丰满少妇精品一区二区| 性欧美另类高清| 日韩国产九九精品一区二区三区毛片| 日韩熟女精一区二区三区不卡| 99热线麻豆| 99久久久久| 日日操丁香五月天| 欧美日韩性爱视屏免费看了| 丝袜视频网国产90| 欧美国产精品| 久操热线| 国产一区二区在线播放量| 中文字幕丝袜人妻| 激情五月婷婷综合| 午夜精品久久久久久久99蜜桃一| 日本加勒比无码专区| 亚洲揄拍网| 久操凹凸视频| 亚洲天堂另类| 天美一二三在线观看Av| 综合婷婷| aa片毛片| 超碰97日韩| 欧美一区二区观看在线| 久久丝袜| 另类专区加勒比| 伦激情人妻另类人妻| 大学生口爆吞精| 国产麻豆91欧美一区二区久久婷婷国产精品| 欧洲色| 一区二区三区高清 | 情趣丝袜无码操逼视频| 黄片色区软件| 神马久久久久| 成人毛片免费| 黄片www视频免费| 大学生美女口爆| dy888午夜老子影视达达兔| 久久男人天堂| 国产精品久久久| 欧美一二三级精品在线| 激情小说日韩无码| 亚洲系列第一页| 能在线播放的国产三级| 日韩激情啪啪| 亚洲色综合| 日韩美脚一区二区网站| 大香蕉一线视频| 成视频在线观看免费看| 视频在线观看免费一区二区三区 | 亚洲欧美精品一区天堂久久 | 日韩日本欧美在线观看| 9色国产精品一区粉嫩 | 男人亚洲天堂| 日韩免费中文字幕视频| 毛片一区二区| 俄罗斯一区二区视频在线观看| 无码 黑人一区二区三区| 日人妻视频91| 色综合五月天| 国产AV人人 夜夜人人澡| 999 久久久| 超碰97COm中文| 天天影视色香欲综合网小说| 久草视频在线视频在线视频在线观看 | 激情婷婷综合久久| 99久久精品无码一区二区毛片免费 | 午夜丁香| 色月天AV导航| 欧美另类天堂| 亚洲欧美首页| 久久久久国产一区二| 熟妇人妻精品一区二区视频色欲| 青青操少妇| 亚91网| 亚洲无码太久| 亚州国产精品乱| 国产精品欧美激在线| 婷婷人妻激情| 中文字幕AV乱伦| 人人操av| 玖玖爱一区在线| 亚洲人妻久久| 亚洲无码AV九九九| 啊灬快c我灬啊灬用力灬啊灬-国产精品性做久久久久久-成人AV | 操逼操网| 免费一级毛片在线视频观看| 亚洲精品天天影视综合网 | 色综合av综合久久| 色五月激情网| 91夜夜蜜桃臀1区2区3区| 欧美日韩另类激情图片| 中文字幕蜜乳av| 九九色综合| 97在线亚洲| 一级性爱视频免费在线| 五月婷丁香| 96国产污污污丝袜| 最新av中文字幕高清| 色婷婷成人| 亚洲国产蜜臀系列在线观看| 国产福利一区二| 亚洲色图超碰在线| 性欧美| 欧美日韩中文亚洲v在线综合| 亚洲 欧美 另类 日韩 人妻一区| 久久久蜜桃臀无码视频| 婷婷五月天av| 伊人嫩草| 综合久久欧美| 学生妹天天看| 亚州操逼图| 麻豆精品A片免费观看| 久久国产AⅤ| www.人人cao| 精品久操| 91久久久久久| 日韩欧美久久婷婷网站| 抽插无码高清一区| 色偷综合| 精品一二三区久久AAA片| 夜夜福利| 激情干在线| 97一区二区蜜臀| 翔田千里无码一区| 亚洲情色在线| 男女激烈网站最新| 日韩精品电影| 久操com| 久久久久元码视频| 欧美色性爱| 舔舔啊| 探花精品视频| 欧美亚洲天天| 中文啪啪视频| 超碰欧美| 日韩精品第3页| 久久免费99精品久久久久久| 久久伦理视频久久大香蕉视频| 久久久久久久九九九九| 九九九久千久久激情蜜桃在线看| 精品日韩人妻视频| 欧美第38页| 婷婷丁香九月| 91劲爆| 久久婷婷五月天| 香蕉视频欧美一卡二卡| 91天美传媒精品| 久久久精品无码亚免费| …中文字幕亚洲乱,97人妻无码费视…| 国产精品青草综合久久| 九九热精品视频六| 色婷婷综合久久中文字幕雪峰| 翔田千里AV无码秘 三区| 亚洲吊色| 国产精品点击进入在线影院| 美女91网址 | 亚洲欧洲日产国产综合网| 精品一区二区在线针对华人免费观看这里只有精品免费观看 | 欧美碰碰综合色| 国产一区二区三区中文字幕| 久久五月天婷婷丁香中文字幕| 久久综合久色欧美综合狠狠 | 人妻精品综合中文字幕在线| 在线观看亚洲成人精品| 亚洲涩图欧美| 久操大香蕉手机视频在线看| 熟妇xxxxx性春色| 亚洲图片欧美另类综合免费视频大大香| 1024香蕉视频| 亚洲av性爱电影| 亚洲 小说 欧美 激情 另类| 天天综合网合集91| 久久久久久久久久久六六| 啪啪AV导航| 农村少妇久久久久久久| 六月婷婷一区二区三区| 天天日天天舔天天喷天天射| 亚洲国产精品V?在线播放| 日韩天天综合| 蜜臀人妻少妇久久在线观看| 99国产人成精品| 精品人妻一区二区三区在| 亚洲情色综合网| 男人天堂久久日韩| 香蕉婷婷| 26uuu国产日韩综合在线观看| 中文字幕视频在线观看| 欧美偷偷网| 999综合色| 无码又爽又硬又激情免费视频| 日日操丁香五月天| 精品人妻一区二区三区日产乱码| 欧美日韩国产精品久久色婷婷| 国产夜夜艹| 天天爱天天韩国日本牛牛牛牛| 色久桃花影院在线观看| 欧美激情综合| 性欧美91| 伊人青青一区成人视频在线观看区| 抽插无码高清一区| 久久精品中文字幕观看| 韩日欧亚a级| 少妇久久久免费| 丝袜av一区二区三区| 蜜臀少妇一区二区| 综合色啪| 色爱三区| 中文字幕日韩人妻视频一区二区三区 | 亚洲影院成人| 色噜噜狠狠色综无码久久合欧美| 久热99999| 日韩 欧美 国产 麻豆| 五月天开心网| 色5月婷婷| 操一区| 国产无马av| 黄片在线免费在线观看| 99re国产精品视频| 欧美性爱18观看| 老熟女乱伦一区| 蜜臀无码视频在线观看| 亚洲麻豆av一区二区| 久草看看看| 久久久免费视频18| 欧美线天码中字| 欧洲亚洲综合| 综合熟妇一区二区三区| 国产精品另类| 欧美综合色| 亚洲一区二区 麻豆传媒| 色狠人在线99| 99久热精品99re6热| 精品一二三区四视频| 久久九七| 日日夜夜模| 91丝袜美腿片| 骚妻少妇精品性色无码四色A V| 美女上床网站| 欧美色干| 在线日韩精品一区二区三区| 精品99999| 青草草免费网站av| 午夜福利视频在线一区| 日韩一级免费性爱| 国产又粗又又黄又猛| 91 刺激在线| 99国产精品人妻人伦| 一区二区三区蜜桃成人撸久久东京热| 夜夜嗨av午夜成人| 国内精品a| 免费av大片| 国内三级自拍小视频在线观看| 丁香五月激情综合| 天天射网| 超碰69| 91九色丨风韵犹存| 日日干天天干夜夜爽| 粉嫩不卡一区二区性爱| 精品久久久久久亚洲| 精品人妻二区三区| 亚洲欧美91√| 在线中文字幕视频| 精品国产人成在线| www.91色综合| 大香蕉在线86| 骚货操死你| 久久久久久久久久va| 亚洲人妻中文高清| 啊啊啊啊啊啊啊国| 91碰碰| 美女91AV| 国产区性爱在线视频秋霞豆| 99热综合| 91n免费处女| 日本影视久久免费| 日韩性爱免费视频在线网站| 极品色社| 久草成人影片| 国产精品com| 亚洲国产一区二区三区四区国产| 国内精品久久国产,www香蕉久久五月丁香,亚洲欧美日韩精品永久在线,日本精品一 | 国产精品福利资源在线尤物| 操婷婷逼| 操逼精品视频| 嗯嗯啊啊好爽| 久久露脸国产老熟女| 丝袜喷水在线| 9久久精品| 看全色黄大色大片免费视频| 成人免费不卡在线视频| 大香伊人在线一区| 操久久久久| 5278欧美一区二区三区| 久久久久大香青草精品综合| 麻豆一区二区AV天美| 国产熟女免费观看久久| 日本不卡码黄色| 青娱乐 青青青操 日逼| 欧美人与性动交a美精品| 欧美一区二区三区大综合| 91色射| 久久一区二区三区入口| 四虎AV影视国产精品亚洲精品| 精品97久久| 女人爽到高潮潮喷18禁网站| 日本久久久久久久久| 国产sv美女内射| 欧美一级做a爰片免费视频| 日韩精品人妻中文字幕久久久| 女性喷水高潮在线观看| 色老汉玖玖爱| 嗯嗯不要 视频| 欧美疯狂做爰xxxx| 精品国产综合久久福利,热99这里有精品综合久久,99热这里只有免费国产精品,精 | 欧美中文综合| 91精品久久久久久77777| 青青草在线视频美女| 在线视频日韩欧美国产| 亚洲性少妇| 乱伦av麻豆| 第二页中文字幕| 亚洲天堂精品日韩电影| 好淫网一二三视区| 麻豆AV一区二区天美传媒| 日本精品第一视频在'| 日本在线15p| 婷婷激情五月天小说网| 夜精品久无码| 福利在线观看一区二区| 双插在线| 国产强奸乱伦xd| 97精品久久久久中文字幕| 久久av成人无码免费| 韩国一级婬片A片无码天美 | 超碰久久精品| 五月天玖玖资源站| 96国产精品| 亚洲成av人片色午夜乱码| 久久精品无码专区| 中文字幕艹艹| 亚洲欧洲成人在线电影| 欧美在线啊啊啊 | 久久久久久久久久久久黄色| 日本日逼高清| 国产视频第2页| 亚洲精品视频在线播放| 久久久久97| 97超碰天天爱天天爱| 亚洲成a人在线观看久| 久久线上视频免费看| 五月激情综合网| 乱伦一二三区| 91热色| 国语精品内射在线观看| 一本色道熟妇| 黄网站黄视频网站进入口| 久热在线精品免费观看| av久日| 久久久精品国产亚洲伊人| 伊人操你| 亚洲涩图欧美| 强奸少妇AV导航网| 草草网站影院白丝内射| 伊人9| 看黑丝美女操逼青青网站| 天天干天天狼在线视频| 国产精品第一页国产大屁股视频免费区 | 久久久久久九九九九-美女久久久久久久-成人AV| 亚洲无码成人精品| 精品国产乱码久久久久久久久久毛片| 亚洲欧美精品91| 无码国产Av| 日躁天天爽爽| 最新中文字幕av| 99成人| 午夜爽爽爽在线观看永久入口姬片| 99精品综合久久久久五月天| 亚洲熟妇丝袜在线观看| 亚洲精品日日夜夜52| 97综合久久| 久久久久久中文| 自拍视频大全亚洲专媒视频/一区二区三区| yellow网站免费观看日韩高清无码| 色网亚洲人| 伊人991| 青青青操| 国产一区二区啪啪视频| AV一区观看| 亚洲天天在线| 天操天操夜操夜月操月年年操操| 97激情97激情| 中文字幕五区| www.91理论| 欧洲综合无码| 97啪啪| 97天天| 视频黄站| 欧美影音在线| 97超碰热线| 99色在线| 亚洲av无码成人精品国产| 天堂无码精品国产久| 日日操免费视频| 啊啊啊久久| 99久久99九九99九九九| 免费99精品国产自在在线| 日韩av熟女一区二区三区成人| 天天色粽合合合合合合合| 97摸视频| 亚洲国产婷婷在线播放| 午夜福利1区2区3区| 天天干人人看综合| 亚洲色图欧美激情| 性高潮久久久久久久久久久| 久久精品日韩专区免费观看| 曰韩香蕉97| 91爰爱欧美| 日韩不卡码| 九九九影院| 综合视频91| 淫骚熟女一区二区三区| 麻豆天美制片厂网站视频| 91网亚洲| 亚洲美女精品| 人人色人人射人人妻| 色婷婷综合久久久久中文一区二区| 嗯嗯嗯不要不要免费视频| 调教熟妇 久久久久久| 日本精品一区三区| 999在线电影香蕉| 丁香五月天堂网| 床上啊啊啊一区二区三区| 欧美毛片在线网| 国产精品乱人伊人网| 97爱免费插| 国产亚洲欧洲在线观看| 日韩丝袜高跟制服在线观看| 欧亚揄拍偷拍精品视频|