Kanika Narang

22 papers A* 2A 1B 2Journal 10Unranked 6
YearRankTypeTitle / Venue / Authors
2024 J jnl
CoRR
Patrick Huber, Arash Einolghozati, Rylan Conway, Kanika Narang, Matt Smith, Waqar Nayyar, Adithya Sagar, Ahmed Aly, Akshat Shrivastava
2024 A* conf
AAAI
Neha Mukund Kalibhat, Kanika Narang, Hamed Firooz, Maziar Sanjabi, Soheil Feizi
2024 J jnl
Trans. Mach. Learn. Res.
Xiaotian Han, Hanqing Zeng, Yu Chen, Shaoliang Nie, Jingzhou Liu, Kanika Narang, Zahra Shakeri, Karthik Abinav Sankararaman, Song Jiang, Madian Khabsa, Qifan Wang, Xia Hu
2024 J jnl
CoRR
Wang Bill Zhu, Deqing Fu, Kai Sun, Yi Lu, Zhaojiang Lin, Seungwhan Moon, Kanika Narang, Mustafa Canim, Yue Liu, Anuj Kumar, Xin Luna Dong
2023 conf
ACL (Findings)
Aaron Mueller, Kanika Narang, Lambert Mathias, Qifan Wang, Hamed Firooz
2023 J jnl
CoRR
Aaron Mueller, Kanika Narang, Lambert Mathias, Qifan Wang, Hamed Firooz
2023 J jnl
CoRR
Xiaotian Han, Hanqing Zeng, Yu Chen, Shaoliang Nie, Jingzhou Liu, Kanika Narang, Zahra Shakeri, Karthik Abinav Sankararaman, Song Jiang, Madian Khabsa, Qifan Wang, Xia Hu
2022 J jnl
CoRR
Neha Mukund Kalibhat, Kanika Narang, Liang Tan, Hamed Firooz, Maziar Sanjabi, Soheil Feizi
2021 J jnl
Data Min. Knowl. Discov.
Kanika Narang, Yitong Song, Alexander G. Schwing, Hari Sundaram
2021 A* conf
SIGIR
Kanika Narang, Adit Krishnan, Junting Wang, Chaoqi Yang, Hari Sundaram, Carolyn Sutter
2020 conf
WOAH
Kanika Narang, Chris Brew
2020 conf
PAKDD (1)
Alex Morales, Kanika Narang, Hari Sundaram, ChengXiang Zhai
2020
Kanika Narang
2019 J jnl
CoRR
Kanika Narang, Chaoqi Yang, Adit Krishnan, Junting Wang, Hari Sundaram, Carolyn Sutter
2019 J jnl
CoRR
Kanika Narang, Austin Chung, Hari Sundaram, Snigdha Chaturvedi
2017 B conf
CHIIR
Kanika Narang, Susan T. Dumais, Nick Craswell, Daniel J. Liebling, Qingyao Ai
2015 J jnl
IEEE Trans. Hum. Mach. Syst.
Samleo L. Joseph, Jizhong Xiao, Xiaochen Zhang, Bhupesh Chawda, Kanika Narang, Nitendra Rajput, Sameep Mehta, L. Venkata Subramaniam
2013 B conf
IJCNLP
Kanika Narang, Seema Nagar, Sameep Mehta, L. Venkata Subramaniam, Kuntal Dey
2013 A conf
ECIR
Kanika Narang, Seema Nagar, Sameep Mehta, L. Venkata Subramaniam, Kuntal Dey
2013 conf
SNAKDD
Kanika Narang, Kristina Lerman, Ponnurangam Kumaraguru
2013 conf
WISE (2)
Seema Nagar, Kanika Narang, Sameep Mehta, L. Venkata Subramaniam, Kuntal Dey
2010 conf
ICEB
Charvi Puri, Kanika Narang, A. Tiwari, Mayank Vatsa, Richa Singh
redb/extractors/decompiler/bninja/similarity/minhashcustom.py
← Index redb/extractors/decompiler/bninja/similarity/minhashcustom.py python
import numpy as np
import mmh3

class MinHashCustom:
    """
    DTO for an actual MinHash
    <minhash>: a binary sequence of packed int8/32 values
    <minhash_int>: the equivalent representation of <minhash> but as list of int8/32
    """

    _HASH_MAX = 0xFFFFFFFF
    _MINHASH_BITS = 32

    def getSignatureEntrySize(self):
        return 1 if self.MINHASH_BITS <= 8 else 4

    def __init__(self, function_addr=None, minhash_bytes=None, minhash_signature=None, minhash_bits=32):
        self.minhash = b""
        self.minhash_int = []
        if minhash_bits:
            self._MINHASH_BITS = minhash_bits
        if minhash_bytes and minhash_signature:
            raise ValueError("Can use only one keyword argument")
        if minhash_bytes:
            if self._MINHASH_BITS <= 8:
                minhash_signature = np.frombuffer(minhash_bytes, dtype=np.uint8)
            else:
                minhash_signature = np.frombuffer(minhash_bytes, dtype=np.uint32)
            self.setMinHash(minhash_signature)
        elif minhash_signature:
            self.setMinHash(minhash_signature)

        self.shingler_composition = {}
        self.function_addr = function_addr

    def hasMinHash(self):
        return len(self.minhash) > 0

    def getMinHash(self):
        return self.minhash

    def getMinHashInt(self):
        return self.minhash_int

    def setMinHash(self, minhash_signature):
        self.minhash_int = [i % 2 ** self._MINHASH_BITS for i in minhash_signature]
        if self._MINHASH_BITS <= 8:
            self.minhash = np.array(self.minhash_int, dtype=np.uint8).tobytes()
        else:
            self.minhash = np.array(self.minhash_int, dtype=np.uint32).tobytes()

    def getComposition(self):
        return self.shingler_composition

    def scoreAgainst(self, other):
        return self.calculateMinHashScore(self.minhash, other.minhash, minhash_bits=self._MINHASH_BITS)

    @staticmethod
    def getHashMax():
        return MinHashCustom._HASH_MAX

    @staticmethod
    def hashData(data, seed) -> int:
        if isinstance(data, (str, bytes, bytearray)):
            return mmh3.hash(data, seed) & MinHashCustom._HASH_MAX
        elif isinstance(data, (list, tuple)):
            to_hash = "|".join(str(elem) for elem in data)
            return mmh3.hash(to_hash, seed) & MinHashCustom._HASH_MAX
        else:
            raise NotImplementedError(
                f"Type not supported for hashData: {type(data).__name__}"
            )

    @staticmethod
    def calculateMinHashScore(first, second, minhash_bits=32):
        if minhash_bits <= 8:
            first_np = np.frombuffer(first, dtype=np.uint8)
            second_np = np.frombuffer(second, dtype=np.uint8)
        else:
            first_np = np.frombuffer(first, dtype=np.uint32)
            second_np = np.frombuffer(second, dtype=np.uint32)
        return 100.0 * sum(first_np == second_np) / len(first_np)

    @staticmethod
    def calculateMinHashIntScore(first, second):
        score = 0
        num_hashes = len(first)
        if num_hashes:
            for index, part in enumerate(first):
                score += 1 if part == second[index] else 0
            return 100.0 * score / num_hashes
        return 0.0

    @property
    def MINHASH_BITS(self):
        return self._MINHASH_BITS