Maison > développement back-end > Tutoriel Python > Implémentation d'algorithmes de recherche de similarité

Implémentation d'algorithmes de recherche de similarité

DDD
Libérer: 2024-10-17 06:14:02
original
673 Les gens l'ont consulté

Implementing similarity search algotithms

Obtenez les données

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import pandas as pd

 

 

descripciones = [

        'All users must reset passwords every 90 days.',

        'Passwords need to be reset by all users every 90 days.',

        'Admin access should be restricted.',

        'Passwords must change for users every 90 days.',

        'Passwords must change for users every 80 days.'

    ]

 

# Cargar el dataset

data = pd.DataFrame({

    'Rule_ID': range(1, len(descripciones) + 1),

    'Description': descripciones

})

Copier après la connexion

Similitude lexicale

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

from sklearn.feature_extraction.text import TfidfVectorizer

from sklearn.metrics.pairwise import cosine_similarity

 

!

# Vectorización de las descripciones con TF-IDF

vectorizer = TfidfVectorizer().fit_transform(data['Description'])

 

# Calcular la matriz de similitud de coseno

cosine_sim_matrix = cosine_similarity(vectorizer)

 

# Crear un diccionario para almacenar las relaciones sin duplicados

def find_related_rules(matrix, rule_ids, threshold=0.8):

    related_rules = {}

    seen_pairs = set()  # Para evitar duplicados de la forma (A, B) = (B, A)

 

    for i in range(len(matrix)):

        related = []

        for j in range(i + 1, len(matrix)):  # j comienza en i + 1 para evitar duplicados

            if matrix[i, j] >= threshold:

                pair = (rule_ids[i], rule_ids[j])

                if pair not in seen_pairs:

                    seen_pairs.add(pair)

                    related.append((rule_ids[j], round(matrix[i, j], 2)))

        if related:

            related_rules[rule_ids[i]] = related

 

    return related_rules

 

# Aplicar la función para encontrar reglas relacionadas

related_rules = find_related_rules(cosine_sim_matrix, data['Rule_ID'].tolist(), threshold=0.8)

 

# Mostrar las reglas relacionadas

print("Reglas relacionadas por similitud:")

for rule, relations in related_rules.items():

    print(f"Rule {rule} es similar a:")

    for related_rule, score in relations:

        print(f"  - Rule {related_rule} con similitud de {score}")

Copier après la connexion

Similitude sémantique

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

!pip install sentence-transformers

from sentence_transformers import SentenceTransformer, util

 

 

# Load the pre-trained model for generating embeddings

model = SentenceTransformer('all-MiniLM-L6-v2')

 

# Generate sentence embeddings for each rule description

embeddings = model.encode(data['Description'], convert_to_tensor=True)

 

# Compute the semantic similarity matrix

cosine_sim_matrix = util.cos_sim(embeddings, embeddings).cpu().numpy()

 

# Function to find related rules based on semantic similarity

def find_related_rules(matrix, rule_ids, threshold=0.8):

    related_rules = {}

    seen_pairs = set()  # To avoid duplicates of the form (A, B) = (B, A)

 

    for i in range(len(matrix)):

        related = []

        for j in range(i + 1, len(matrix)):  # Only consider upper triangular matrix

            if matrix[i, j] >= threshold:

                pair = (rule_ids[i], rule_ids[j])

                if pair not in seen_pairs:

                    seen_pairs.add(pair)

                    related.append((rule_ids[j], round(matrix[i, j], 2)))

        if related:

            related_rules[rule_ids[i]] = related

 

    return related_rules

 

# Apply the function to find related rules

related_rules = find_related_rules(cosine_sim_matrix, data['Rule_ID'].tolist(), threshold=0.8)

 

# Display the related rules

print("Reglas relacionadas por similitud semántica:")

for rule, relations in related_rules.items():

    print(f"Rule {rule} es similar a:")

    for related_rule, score in relations:

        print(f"  - Rule {related_rule} con similitud de {score}")

Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal