Comprendre les index directs et inversés

1. Écrivez devant

Dans le domaine de la recommandation, on entend souvent parler de l'établissement d'un index inversé, ce qui est pratique pour la recherche. J'ai toujours été confus à propos de celui-ci. Qu'est-ce qu'un index inversé, et qu'est-ce qu'un index positif, quel est le sens de établissement d'un indice inversé ? où ? Par conséquent, dans cet article, je comprends simplement ces deux concepts en consultant les informations.

Ce qui suit est ma compréhension basée sur les informations que j'ai vérifiées, qui peuvent ne pas être correctes.

L'index direct et l'index inversé sont deux structures de données importantes dans le domaine des systèmes de recherche de documents, et je comprends qu'il s'agit en fait de deux formes d'organisation différentes pour une requête efficace.Ce qui est établi, c'est la relation entre les documents et les mots Mapping relations.

  • Index positif : 文档->关键词le mappage entre, c'est-à-dire que lorsque nous entrons dans le numéro de document, nous obtiendrons des informations telles que le contenu du document, les mots-clés du document, etc. Il est plus typique, c'est-à-dire que {doc: [word1, word2, ..]}s'il est placé dans la recommandation, il peut correspondre pour{item: [feature1, feature2, ...]}
  • Index inversé : Le mapping entre mots-clés->documents, c'est-à-dire que si l'on saisit des mots-clés, on trouvera l'information du document correspondant, qui est plus typique {word: [doc1, doc2, ...]}et mise dans la recommandation, qui peut correspondre à{user_id: [item1, item2, ..]}

Puisque cette chose vient du domaine de la récupération de documents, commençons par la récupération de documents.

Dans le moteur de recherche, chaque fichier correspond à un ID de fichier, et le contenu du fichier est représenté sous la forme d'un ensemble d'une série de mots-clés.

2. Indice positif

Etablir une relation de correspondance avec le mot-clé du document (page), la structure est la suivante :

正排索引: 由文档指向关键词

文档--> 单词1 ,单词2

单词1 出现的次数  单词出现的位置; 单词2 单词2出现的位置  ...

正排索引: 在搜索栏中输入id查词条(已知id)

S'il est remplacé par une image :
insérez la description de l'image ici
lorsque l'utilisateur saisit un "mot-clé" dans le champ de recherche, en supposant qu'il n'existe qu'un index avant (forward index), alors il est nécessaire de scanner tous les documents de la base d'index pour trouver tous les documents contenant le "mot-clé" Les documents sont ensuite notés selon le modèle de notation, et le classement est présenté à l'utilisateur .

mais? Le nombre de documents inclus dans les moteurs de recherche sur Internet est astronomique, et une telle structure d'index ne peut tout simplement pas répondre aux exigences de retour des résultats de classement en temps réel.

Par conséquent, le moteur de recherche reconstruira l'index avant en un index inversé , c'est-à-dire qu'il convertira le mappage des ID de fichier aux mots clés en mappage des mots clés aux ID de fichier . Chaque mot clé correspond à une série de fichiers. Ces fichiers Ce mot clé apparaît dans tout .

Et ici, si nous comparons le champ recommandé, le document ici ressemble-t-il à l'élément que nous voulons recommander ? Et le mot-clé ici n'est pas comme le user_id dans notre champ recommandé, le processus consistant à donner le document pertinent en fonction du mot-clé ci-dessus, Comme si un user_id est donné, le système de recommandation lui recommande des items_lists associés ? Sur l'importance de l'analogie.

3. Index inversé

Lorsqu'un utilisateur recherche un mot clé dans un moteur de recherche, le moteur de recherche affiche les documents (pages) liés au mot clé à l'utilisateur. Ce processus est un index inversé, et le mot clé pointe vers le document ou le fichier.

La structure est la suivante :

倒排索引: 由关键词指向文档

单词1--->文档1,文档2,文档3

单词2--->文档1,文档2

倒排索引: 将搜索框中的词进行搜索查到哪些id包含这个词,再查这些id(通过分词查id)

À partir du mot-clé du mot, trouvez le document. Les mots affichés dans la figure sont les suivants :
insérez la description de l'image ici
Par conséquent, lorsqu'un utilisateur recherche un certain mot-clé, le système localise immédiatement le mot-clé dans l'index inversé et trouve immédiatement la page contenant le mot-clé.

Les index inversés ont un large éventail de scénarios d'application : moteurs de recherche, indexation de bases de données à grande échelle, recherche de documents, recherche multimédia, etc.

正排索引: 文档 --> 单词
倒排索引: 单词 --> 文档

4. Exemple simple

Prenons un petit exemple pour voir les index avant et arrière.

Supposons que la collection de documents contienne cinq documents, chacun avec le contenu suivant (image du premier lien ci-dessous) :

insérez la description de l'image ici

Ensuite, pour l'indice positif, il doit être stocké de la manière suivante :

文档编号      正排列表
1      谷歌->地图->之父->跳槽->Facebook
2      谷歌->地图->之父->加盟->Facebook
3      谷歌->....
4
5

Et l'index inversé :
insérez la description de l'image ici

De plus, le système d'indexation peut également enregistrer plus d'informations. Par exemple, non seulement le numéro de document mais également l'information de fréquence de mot (TF) peuvent être enregistrées dans la liste inversée correspondant au mot, c'est-à-dire le nombre de fois que le mot apparaît dans un certain document. , la raison de l'enregistrement de ces informations est que les informations sur la fréquence des mots sont un facteur de calcul très important lors du calcul de la similarité entre la requête et le document lors du tri des résultats de la recherche.
insérez la description de l'image ici
Une structure d'index inversée plus complète peut également enregistrer plus d'informations. En plus d'enregistrer le numéro de document et la fréquence des mots, certains enregistrent en plus les informations de fréquence du document correspondant à chaque mot et enregistrent le mot dans une certaine liste inversée où il apparaît dans le document. .

  • Informations sur la fréquence des documents : représente le nombre de documents de la collection de documents contenant un certain mot. Ces informations sont enregistrées car elles sont également un facteur très important dans le classement des résultats de recherche.
  • L'information de position du mot apparaissant dans un certain document n'a pas besoin d'être enregistrée, elle peut être présente ou non.

Par exemple, en prenant le mot "Las" comme exemple, le numéro de mot est 8 et la fréquence de document est 2, ce qui signifie qu'il y a deux documents dans l'ensemble de documents contenant ce mot, et la liste inversée correspondante est {( 3 ; 1 ; <4> ), (5 ; 1 ; <4>)}, le format ici (numéro du document ; fréquence d'occurrence dans le document ; position de l'occurrence). Je comprends que si nous avons la fréquence d'un certain mot dans les documents et le nombre de documents contenant ce mot, nous pouvons calculer la valeur TF-IDF du mot dans chaque document, qui peut être utilisée comme un indice important pour le classement.

insérez la description de l'image ici

5. Revenir aux recommandations

5.1 Informations sur la rangée avant des matériaux

Dans le domaine de la recommandation, les stratégies d'optimisation d'index sont souvent utilisées du côté du rappel, c'est-à-dire lors de la recherche de candidats.

Dans le pool de ressources, chaque matériel (actualité, marchandise, chanson) correspond à un ID, et le matériel est représenté comme une collection d'une série de contenus de champs . Il existe des champs représentant des titres, des catégories, des emplacements géographiques, des prix, etc. La figure suivante montre une partie de la structure d'un certain type de table de pool de ressources matérielles.
insérez la description de l'image ici
Nous pouvons utiliser l'identifiant unique de chaque matériau pour obtenir différents champs d'attributs de ce matériau, et interroger les détails de ce matériau, qui est l'indice positif au sens habituel.
insérez la description de l'image ici
Alors, qu'est-ce qu'un index inversé ? Pour comprendre l'index inversé, nous devons comprendre nos scénarios d'application réels. Dans le rappel du système de recommandation, comme mentionné ci-dessus, nous devons en fait obtenir tous les matériaux sous une certaine fonctionnalité, un thème ou un mot-clé en tant qu'ensemble de candidats recommandés . A ce moment là, il est inversé, le point de départ est de trouver des matériaux avec ces caractéristiques, c'est ce qu'on appelle l'indice inversé.

insérez la description de l'image ici

5.2 L'idée de rangée inversée dans le filtrage collaboratif

C'est également là que je suis entré en contact avec le terme d'index inversé pour la première fois, lorsque j'ai généré une liste de recommandations basée sur l'idée du filtrage collaboratif des utilisateurs.

Nous savons que le filtrage collaboratif des utilisateurs est donné à l'utilisateur actuel, nous devons trouver les n premiers utilisateurs similaires à cet utilisateur en fonction de la similarité, puis voir sur quels produits ces n utilisateurs ont cliqué, puis nous pouvons recommander quels produits.

Supposons, selon le journal de comportement de l'utilisateur, que nous ayons obtenu les produits cliqués par quatre utilisateurs A, B, C et D comme suit :
insérez la description de l'image ici
À ce stade, notre idée générale de la recherche de similarité des utilisateurs est que la couche externe traverse les utilisateurs, et la couche interne traverse également les utilisateurs , pour chaque utilisateur de la couche interne, regardez le nombre de produits cliqués avec l'utilisateur actuel dans la couche externe, ou enregistrez le vecteur des produits qui sont cliqués conjointement.Après avoir traversé un utilisateur en mémoire , une similarité peut être calculée. Le pseudocode ressemble à ceci :

for user1, item_list1 in user_item.items():
	for user2, item_list2 in user_item.items():
		if user1 == user2: continue
		con_click_action = 0
		for item in item_list1:
			if item in item_list2:  # 共同点击
				con_click_action += 1  
		
		# 计算当前用户相似性
		similarity{
    
    user1}{
    
    user2} = con_click_action / math.sqrt(len(item_list1) * len(item_iist2)

C'est très chronophage lorsqu'il y a beaucoup d'utilisateurs, en effet, ils n'ont pas agi sur le même article, c'est-à-dire que dans la plupart des cas, deux utilisateurs vont rarement noter le même article , ce qui est très peu économique.

On peut donc changer l'idée d'inversion, construire une liste inversée des éléments aux utilisateurs, et pour chaque élément, enregistrer une liste des utilisateurs ayant agi sur l'élément. comme ça:

insérez la description de l'image ici
A ce moment, parcourez une fois le tableau inversé, et accumulez des statistiques sur les éléments de position correspondant aux deux utilisateurs dans la liste des utilisateurs, de manière à obtenir le nombre d'actions simultanées sur le même élément entre tous les utilisateurs, c'est-à-dire le numérateur de la similarité cosinus.

for movie, users in movie_user.items():     # movid是movieID, users是set集合
    for u in users:           # 对于每个用户, 都得双层遍历
        for v in users:
            if u == v:
                continue
            user_sim_matrix.setdefault(u, {
    
    })      # 把字典的值设置为字典的形式
            user_sim_matrix[u].setdefault(v, 0)
            user_sim_matrix[u][v] += 1     # 这里统计两个用户对同一部电影产生行为的次数, 这个就是余弦相似度的分子

# 下面计算用户之间的相似性
for u, related_users in user_sim_matrix.items():
    for v, count in related_users.items():    # 这里面v是相关用户, count是共同对同一部电影打分的次数
        user_sim_matrix[u][v] = count / math.sqrt(len(trainSet[u]) * len(trainSet[v]))   # len 后面的就是用户对电影产生过行为的个数   

Références:

Je suppose que tu aimes

Origine blog.csdn.net/wuzhongqiang/article/details/121593181
conseillé
Classement