m3ttiw / orange_cb_recsys Goto Github PK
View Code? Open in Web Editor NEWContent-Based Recommender System Framework in python
License: GNU General Public License v3.0
Content-Based Recommender System Framework in python
License: GNU General Public License v3.0
Ho provato a installare il package da pypi e il package mysqlclient ha dato questo errore:
Collecting orange-cb-recsys
Downloading orange_cb_recsys-0.1-py3-none-any.whl (14 kB)
Requirement already satisfied: PyYAML==5.3.1 in /home/mattia/PycharmProjects/untitled/venv/lib/python3.8/site-packages (from orange-cb-recsys) (5.3.1)
Collecting mysql-connector-python==8.0.20
Downloading mysql_connector_python-8.0.20-cp38-cp38-manylinux1_x86_64.whl (14.8 MB)
Collecting numpy==1.18.4
Downloading numpy-1.18.4-cp38-cp38-manylinux1_x86_64.whl (20.7 MB)
Collecting nltk==3.5
Downloading nltk-3.5.zip (1.4 MB)
Collecting wikipedia2vec==1.0.4
Downloading wikipedia2vec-1.0.4.tar.gz (1.2 MB)
Collecting babelpy==1.0.1
Downloading BabelPy-1.0.1.tar.gz (8.0 kB)
Collecting mysql==0.0.2
Downloading mysql-0.0.2.tar.gz (1.9 kB)
Collecting gensim==3.8.3
Downloading gensim-3.8.3-cp38-cp38-manylinux1_x86_64.whl (24.2 MB)
Collecting protobuf>=3.0.0
Downloading protobuf-3.12.2-cp38-cp38-manylinux1_x86_64.whl (1.3 MB)
Collecting click
Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
Requirement already satisfied: joblib in /home/mattia/PycharmProjects/untitled/venv/lib/python3.8/site-packages (from nltk==3.5->orange-cb-recsys) (0.15.1)
Collecting regex
Downloading regex-2020.6.8-cp38-cp38-manylinux2010_x86_64.whl (673 kB)
Collecting tqdm
Downloading tqdm-4.46.1-py2.py3-none-any.whl (63 kB)
Collecting jieba
Downloading jieba-0.42.1.tar.gz (19.2 MB)
Collecting lmdb
Downloading lmdb-0.98.tar.gz (869 kB)
Collecting marisa-trie
Downloading marisa-trie-0.7.5.tar.gz (270 kB)
Collecting mwparserfromhell
Downloading mwparserfromhell-0.5.4.tar.gz (135 kB)
Requirement already satisfied: scipy in /home/mattia/PycharmProjects/untitled/venv/lib/python3.8/site-packages (from wikipedia2vec==1.0.4->orange-cb-recsys) (1.4.1)
Requirement already satisfied: six in /home/mattia/PycharmProjects/untitled/venv/lib/python3.8/site-packages (from wikipedia2vec==1.0.4->orange-cb-recsys) (1.15.0)
Collecting mysqlclient
Downloading mysqlclient-1.4.6.tar.gz (85 kB)
ERROR: Command errored out with exit status 1:
command: /home/mattia/PycharmProjects/untitled/venv/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pycharm-packaging5/mysqlclient/setup.py'"'"'; __file__='"'"'/tmp/pycharm-packaging5/mysqlclient/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-pip-egg-info-89vzbxx0
cwd: /tmp/pycharm-packaging5/mysqlclient/
Complete output (12 lines):
/bin/sh: 1: mysql_config: not found
/bin/sh: 1: mariadb_config: not found
/bin/sh: 1: mysql_config: not found
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pycharm-packaging5/mysqlclient/setup.py", line 16, in <module>
metadata, options = get_config()
File "/tmp/pycharm-packaging5/mysqlclient/setup_posix.py", line 61, in get_config
libs = mysql_config("libs")
File "/tmp/pycharm-packaging5/mysqlclient/setup_posix.py", line 29, in mysql_config
raise EnvironmentError("%s not found" % (_mysql_config_path,))
OSError: mysql_config not found
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
libreria pickle, ora la collezione non è più necessaria dato che li serializziamo appena ottenuti.
Si potrebbe comunque mantenere una lista dei content_id che sono stati serializzati su un file
Al momento effettuiamo un controllo su tf-idf, serializzando in un indice i field per cui è stata scelta questa tecnica; il comportamento di questa fase deve essere reso generico considerando che qualsiasi tecnica può avere bisogno di un "refactor" del dataset in una struttura anche diversa dall'indice
Implementare una classe ClassifierRecommender come figlia di RatingsSPA.
Utilizzare classificatore decisionTree cioè: apprendere un albero di decisione usando come esempi gli item per cui l'utente ha espresso un rating, valutare il "nuovo" item tramite quest'albero.
Modificare il file run.py in modo che controlli se il file in input è json o yaml e agisca di conseguenze
Describe the bug
Abbiamo solo un limitato numero di accessi a babelfy con la api key di default.
To Reproduce
Steps to reproduce the behavior:
Expected behavior
Per evitare problemi l'utente può registrarsi su babelfy e inserire la chiave in fase di configurazione.
Permettere all'utente di inserire la chiave in fase di configurazione o utilizzare un'api key dell'universita(?)
Describe the solution you'd like
Implementare l'Entity Linking con un wapper di OpenCalais che ritorna una FeatureBag
Tf-idf non funziona nel caso in cui si hanno più istanze di questa tecnica, questo perchè viene creato un solo indice, appartenente ad una sola istanza della tecnica, in cui ci sono tutti i field per cui deve essere applicata
Inoltre aggiungere tecnica che fa semplice parsing di coppie item: rating, nel caso il rating sia un field dell'utente
Realizzare esecuzione di una query che prende tutto il contenuto della tabella specificata e itera sul risultato. (metodo iter)
Implementare calcolo di tf-idf (e relativa preparazione del dataset) tramite tensorflow, la classe in cui sarà implementata questa feature estende TfIdfTechnique
Implementare il metodo predict della classe CentroidVector nel file ratings_based.py, calcolare il centroide dei vettori rappresentativi di ogni item, tali vettori si trovano nel field item_field specificato dall'utilizzatore, per questo field va utilizzata la rappresentazione specificata nel relativo parametro.
Lanciare una eccezione laddove
Confrontare con una funzione di similarità il centroide ottenuto e il vettore dell'item per cui si effettua la predizione.
Realizzare una classe astratta Similarity e prevedere in CentroidVector un attributo di questo tipo.
Implementare CosineSimilarity come figlia di Similarity.
Realizzare un implementazione di Explicit semantic analysis con wikipedia2vec
Per esempio nella classe già predisposta per BabelPy
Riadattare il metodo fit di recsys considerando che arriverà in input un frame con le 5 colonne
Realizzare un implementazione di Fast text con gensim
Realizzare un implementazione di word2vec con gensim
Fornire una implementazione di str per tutte le classi dove non è presente
Realizzare funzione utils con cui concatenare i valori di questi field, modificare l'istanziazione di Content(content_analyzer_main.py) e la serializzazione nelle interface dell'id(raw_data_manager.py)
sommare le righe della matrice numpy in input
Creare una classe sentiment analysis come implementazione di FieldProductionTechnique per ottenere score numerici da rating testuali.
Implementare le funzioni di calcolo delle ScorePredictionMetric, l'input sono due series: predizioni e truth. Rimuovere global MAE e globalRMSE
implementare metodi che calcolano metriche di fairness (fairness_metrics.py);
l'input è un dataframe avente le colonne user, item, rating, il frame è complessivo, cioè contiene tutte le raccomandazioni effettuate su tutti gli utenti e tutti gli item.
Le metriche da calcolare sono:
Describe the solution you'd like
Fixare i test con esito negativo
Creare classe RatingsImporter che importa ratings da un file ad essi dedicato,
l'utilizzatore in questa classe deve specificare:
Creare classe astratta RatingProcessor che ottiene score numerici ( nell'intervallo [-1, 1] ) a partire dai rating originali in un formato eventualmente diverso.
Riadattare SentimentAnalysis come implementazione di RatingProcessor, e modificare il metodo in modo che calcoli lo score per un singolo rating.
Nel RatingImporter va anche prevista un'istanza di RatingProcessor.
Prevedere in RatingImporter un metodo import_ratings che importa questi ratings in un dataframe le cui colonne sono: user_id, item_id, original_rating, derived_score, timestamp
Prevedere nel run.py una configurazione con content type rating che costruisce un'istanza di questa classe.
quindi di conseguenza una implementazione di combiningTechnique e una di EmbeddingSource, richiamare i metodi di queste due classi in embeddingTechnique
Realizzare un implementazione di Latent semantic analysis con gensim
Implementare le funzioni di calcolo delle RankingMetric, l'input sono due frame: predizioni e truth, entrambi hanno come colonne item e rating.
Realizzare un implementazione di doc2vec con gensim
per esempio nella classe già predisposta OpenNLP
Realizzare una classe astratta Graph
, che si specializza in BipartiteGraph
e TripartiteGraph
.
Le implementazioni di queste classi possono essere realizzate ad esempio con networkx
o pyneo4j
utilizzando il dbms neo4j.
il grafo è un DAG e viene creato a partire dalle informazioni presenti nel ratings_dataframe
, realizzando degli archi orientati e pesati. Semanticamente gli archi rappresentano un giudizio dato da un utente (from
) ad un item (to
) con un peso, che è dato dalla formula: 1 - score
/ 2
Questo perchè a pesi minori corrisponde una miglior navigazione dell'arco e la normalizzazione dei pesi
(da range [-1, 1] a range [0, 1]) facilita l'implementazione dei recommender.
Quindi 1.0 rappresenta il peso massimo per attraversare un arco e corrisponde a un 'dislike', 0.0 il minimo e corrisponde a un 'like'.
Realizzare dei metodi per navigare efficacemente il grafo, che deve essere esplorabile anche in senso inverso all'orientazione degli archi.
Realizzare un implementazione con networkX
Aggiungere un numero maggiore di test in modo tale da far aumentare la percentuale di coverage
mancano classi CollectionBasedTechnique, SingleContentTechnique, LuceneTfIdf, IndexInterface
Il file di configurazione deve essere uno solo tramite cui istanziare gli oggetti: RawDataConfig e ContentAnalyzerConfig
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.