Ejemplo n.º 1
0
    def test_build(self):
        data = Reader().read('./tests/sentiment_data.txt', fmt='UITup', sep=',', tup_sep=':')
        md = SentimentModality(data=data)

        uid_map = OrderedDict()
        iid_map = OrderedDict()
        for raw_uid, raw_iid, _ in data:
            uid_map.setdefault(raw_uid, len(uid_map))
            iid_map.setdefault(raw_iid, len(iid_map))

        matrix = dok_matrix((len(uid_map), len(iid_map)), dtype=np.float32)

        for raw_uid, raw_iid, _ in data:
            user_idx = uid_map.get(raw_uid)
            item_idx = iid_map.get(raw_iid)
            matrix[user_idx, item_idx] = 1

        md.build(uid_map=uid_map, iid_map=iid_map, dok_matrix=matrix)

        self.assertEqual(md.num_aspects, 3)
        self.assertEqual(md.num_opinions, 2)
        self.assertEqual(len(md.sentiment), 4)
        self.assertEqual(len(md.user_sentiment), 3)
        self.assertEqual(len(md.item_sentiment), 3)
        self.assertEqual(len(md.aspect_id_map), 3)
        self.assertEqual(len(md.opinion_id_map), 2)

        try:
            SentimentModality().build()
        except ValueError:
            assert True
Ejemplo n.º 2
0
    def test_with_modalities(self):
        data = Reader().read("./tests/data.txt")
        sentiment_data = Reader().read("./tests/sentiment_data.txt",
                                       fmt="UITup",
                                       sep=",",
                                       tup_sep=":")
        bm = BaseMethod.from_splits(train_data=data[:-1], test_data=data[-1:])

        self.assertIsNone(bm.user_text)
        self.assertIsNone(bm.item_text)
        self.assertIsNone(bm.user_image)
        self.assertIsNone(bm.item_image)
        self.assertIsNone(bm.user_graph)
        self.assertIsNone(bm.item_graph)
        self.assertIsNone(bm.sentiment)

        bm.user_text = TextModality()
        bm.item_image = ImageModality()
        bm.sentiment = SentimentModality(data=sentiment_data)
        bm._build_modalities()

        try:
            bm.user_text = ImageModality()
        except ValueError:
            assert True

        try:
            bm.item_text = ImageModality()
        except ValueError:
            assert True

        try:
            bm.user_image = TextModality()
        except ValueError:
            assert True

        try:
            bm.item_image = TextModality()
        except ValueError:
            assert True

        try:
            bm.user_graph = TextModality()
        except ValueError:
            assert True

        try:
            bm.item_graph = ImageModality()
        except ValueError:
            assert True

        try:
            bm.sentiment = TextModality()
        except ValueError:
            assert True

        try:
            bm.sentiment = ImageModality()
        except ValueError:
            assert True
Ejemplo n.º 3
0
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ============================================================================
"""Example for Multi-Task Explainable Recommendation"""

from cornac.datasets import amazon_toy
from cornac.data import SentimentModality
from cornac.eval_methods import RatioSplit
from cornac.metrics import NDCG, RMSE
from cornac.models import MTER
from cornac import Experiment

data = amazon_toy.load_rating()
sentiment = amazon_toy.load_sentiment()
md = SentimentModality(data=sentiment)
eval_method = RatioSplit(data,
                         test_size=0.2,
                         rating_threshold=1.0,
                         sentiment=md,
                         exclude_unknowns=True,
                         verbose=True,
                         seed=123)

mter = MTER(n_user_factors=15,
            n_item_factors=15,
            n_aspect_factors=12,
            n_opinion_factors=12,
            n_bpr_samples=1000,
            n_element_samples=200,
            lambda_reg=0.1,
Ejemplo n.º 4
0
    def test_init(self):
        data = Reader().read('./tests/sentiment_data.txt', fmt='UITup', sep=',', tup_sep=':')
        md = SentimentModality(data=data)

        self.assertEqual(len(md.raw_data), 4)